ZF2:依赖注入,MVC,配置和引导程序

时间:2011-12-31 19:26:23

标签: php zend-framework2

我对Zend Framework 2有疑问:

我有 library / System and library / Zend。系统是我的自定义库,我想配置depplication(路由,模块等,并将用户重定向到正确的模块,控制器和/或操作)。

我不想在每个application / modules / ModuleName / Module.php文件中执行此操作。所以,我的库/系统可以完成与应用程序配置相关的所有事情。

1 个答案:

答案 0 :(得分:9)

正如上面的评论所述:注册到bootstrap-event并在那里添加新路由:

<?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事件被触发。

请注意,ZendFramework 1路由并不总是与ZendFramework 2路由兼容。

更新评论

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
    }
}

这只发生在一个 zf2模块中(名为Application,也可以是唯一的模块)。这不符合您的需求?你可以:

  • 扩展自定义module autoloader
  • 为您自己的逻辑扩展Zend \ Mvc \ Application
  • 使您的代码与zf2兼容