我有一个关于Zend框架2 questiom:ZF2:依赖注入,MVC,配置和引导
我 库/系统和图书馆/ Zend的。该系统是我的自定义库,我要配置de aplication(路由,模块等,并将用户重定向到正确的模块,控制器和/或操作)。
我不想在每个应用程序/ modules/ModuleName/Module.php文件中执行此操作。所以,我的库/系统可以完成与应用程序配置相关的所有工作。
我有一个关于Zend框架2 questiom:ZF2:依赖注入,MVC,配置和引导
我 库/系统和图书馆/ Zend的。该系统是我的自定义库,我要配置de aplication(路由,模块等,并将用户重定向到正确的模块,控制器和/或操作)。
我不想在每个应用程序/ modules/ModuleName/Module.php文件中执行此操作。所以,我的库/系统可以完成与应用程序配置相关的所有工作。
如上评论说:注册到引导事件,并添加新的路线有:
<?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
可以是唯一一个为好) 。这不符合你的需求?你可以:
在这个例子中,我的模块将在“mywebsite.com/test”被请求时被调用? – 2012-01-02 16:31:07
如果在我的'library/custom/application.php'中执行相同的操作,但是在这个模块实例中:'$ events-> attach('bootstrap','bootstrap',array(INSTANCE OF MODULE,'init '),100);',这样,我可以自动调用init方法并定义我的模块路由。 (当然,用更多的代码来做这件事。) – 2012-01-02 16:33:08
一个类型:具有相同名称的'公共函数init(Manager $ moduleManager)'和'公共函数init($ e)'。 – 2012-01-02 16:35:04
您是否尝试过直接访问路由器(Zend公司\的mvc \ Application.getRouter())? – Fge 2012-01-01 13:00:11
返回没有通过url info传递的控制器/动作/参数的Zend \ Mvc \ Router \ SimpleRouteStack对象。 – 2012-01-01 16:04:32
@Fge我试过了Zend \ Mvc \ PhpEnvironment \ Request.getRequestUri(),但没有成功。 – 2012-01-01 16:08:31