0
我期待转发我所有的请求的来源:路由所有模块的流量默认模块Zend框架
的.com/M/
到
的.com/
我以为我可以尝试在模块的引导程序中执行此操作,但前端控制器尚未安装。我不断看到前端控制器插件的提及,但是我如何为这个模块设置它?
对于愚蠢的问题,我仍然试图掌握Zend Framework。
我期待转发我所有的请求的来源:路由所有模块的流量默认模块Zend框架
的.com/M/
到
的.com/
我以为我可以尝试在模块的引导程序中执行此操作,但前端控制器尚未安装。我不断看到前端控制器插件的提及,但是我如何为这个模块设置它?
对于愚蠢的问题,我仍然试图掌握Zend Framework。
这里是一个控制器插件,用于将所有流量传送到特定模块到默认模块。我给出了两种路由流量的方式,通过转发请求(url保持不变,但执行默认模块),或者通过将浏览器重定向到默认模块。
请注意,这是未经测试,但应该工作。如果您有任何疑问或问题,请告诉我。
<?php
class Application_Plugin_ModuleRedirector extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$module = $request->getModuleName();
$controller = $request->getControllerName();
$action = $request->getActionName();
// don't execute plugin if not in the module "m"
if ($module != 'm') {
return ;
}
// foward to default module with same controller and action
$request->setModuleName('default')
->setControllerName($controller)
->setActionName($action);
// OR remove the above and use this for a hard redirect
$urlHelper = new Zend_View_Helper_Url();
$url = $urlHelper->url(array(
'module' => 'default',
'controller' => $controller,
'action' => $action));
$redirector = Zend_Controller_Action_HelperBroker::
getStaticHelper('redirector');
$redirector->gotoUrl($url);
}
}
要激活它,与前端控制器注册插件:
Zend_Controller_Front::getInstance()->registerPlugin(new Application_Plugin_ModuleRedirector());
我很高兴地看到你的答案,并简单URL,这像宣传的那样......但后来我跑进我所有的幻想路由和出于某种原因,这段代码无法识别URL中的值是变量的模块... :( – stagl
)其中一个URL不起作用的示例是什么?preDispatch插件在URL已经被分解用于路由,所以有可能这些更复杂的URL根据您定义的路由没有被正确路由? – drew010