7

ZendFramework2に関して質問があります。

ライブラリ/システムとライブラリ/Zendがあります。システムは私のカスタムライブラリであり、レプリケーション(ルート、モジュールなど)を構成し、ユーザーを正しいモジュール、コントローラー、および/またはアクションにリダイレクトします。

各application/modules / ModuleName/Module.phpファイル内でこれを実行したくありません。したがって、私のライブラリ/システムは、アプリケーション構成に関連するすべてを実行できます。

4

1 に答える 1

9

上記のコメントで述べたように、ブートストラップイベントに登録し、そこに新しいルートを追加します。

<?php

namespace Application;

use Zend\Module\Manager,
    Zend\EventManager\StaticEventManager;

class Module
{
    public function init(Manager $moduleManager)
    {
        $events = StaticEventManager::getInstance();
        $events->attach('bootstrap', 'bootstrap', array($this, 'initCustom'), 100);
    }

    public function initCustom($e)
    {
        $app = $e->getParam('application');
        $r = \Zend\Mvc\Router\Http\Segment::factory(array(
                'route'    => '/test',
                'defaults' => array(
                    'controller' => 'test'
                )
            )
        );
        $app->getRouter()->addRoute('test',$r);
    }
}

$app = $e->getParam('application');のインスタンスを返しますZend\Mvc\Application。そこを見て、そこに到達できる追加の部品を確認してください。イベントは、実際のbootstrapディスパッチが発生する前に発生します。

ZendFramework1ルートはZendFramework2ルートと常に互換性があるとは限らないことに注意してください。

コメントに更新

public function initCustom($e)
{
    $app = $e->getParam('application');
    // Init a new router object and add your own routes only
    $app->setRouter($newRouter);
}

新しい質問に更新

<?php

namespace Application;

use Zend\Module\Manager,
    Zend\EventManager\StaticEventManager;

class Module
{
    public function init(Manager $moduleManager)
    {
        $events = StaticEventManager::getInstance();
        $events->attach('bootstrap', 'bootstrap', array($this, 'initCustom'), 100);
    }

    public function initCustom($e)
    {
        $zendApplication = $e->getParam('application');
        $customApplication = new System\Application();
        $customApplication->initRoutes($zendApplication->getRouter());
        // ... other init stuff of your custom application
    }
}

これは、1つのzf2モジュールでのみ発生します(名前は1つだけでもかまいApplicationません)。これはあなたのニーズに合いませんか?あなたは出来る:

于 2012-01-02T16:27:37.627 に答える