无论如何都要在保持默认/模块/控制器/动作/值路由结构的同时创建一个虚荣网址“catch all”路由?
谢谢!
答案 0 :(得分:3)
最好设置自定义路线,例如在引导程序中:
protected function _initRoutes() {
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$router = $front->getRouter();
$router->addRoute(
'neat_url',
new Zend_Controller_Router_Route(
'profile/:username',
array(
'controller' => 'profiles',
'action' => 'view_profile'
)
)
);
}
这样你仍然可以拥有默认路由并拥有一个自定义路由,该路由将重定向/profile/jhon.doe下的所有内容,然后在你的控制器下使用$ this-&gt; _getParam('username'); <获取参数/ p>
答案 1 :(得分:2)
您可以在前端控制器插件上使用PreDispatch()挂钩。像这样:
在你的引导程序中
<?php
...
$frontController = Zend_Controller_Front::getInstance();
// Set our Front Controller Plugin
$frontController->registerPlugin(new Mystuff_Frontplugin());
?>
然后在Mystuff / Frontplugin.php里面
<?php
class Mystuff_Frontplugin extends Zend_Controller_Plugin_Abstract
{
....
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
....
$controllerFile = $this->_GetRequestedControllerFile();
if (!is_file($controllerFile)) {
// Controller does not exist
// re-route to another location
$request->setModuleName('customHandler');
$request->setControllerName('index');
$request->setActionName('index');
}
}
....
}
preDispatch()也是处理应用程序范围身份验证的便利位置。