我的网站需要自定义路线:
所有内容如下:www.site.com/457485789479可以使用参数ID / 45路由到索引/索引。 其他一切应该与zend框架默认值一起使用。
我有这条路线:
resources.router.routes.test.type = "Zend_Controller_Router_Route"
resources.router.routes.test.route = ":id"
resources.router.routes.test.defaults.module = "default"
resources.router.routes.test.defaults.controller = "index"
resources.router.routes.test.defaults.action = "index"
resources.router.routes.test.defaults.id = ""
但是现在,“URL ViewHelper”不起作用,一切都转到“/”,有人看到错误并且可以提供帮助吗?
答案 0 :(得分:0)
您应该使用Zend_Controller_Router_Route_Regex而不是Router_Route
$router->addRoute('router-name', new Zend_Controller_Router_Route_Regex(
'(\d{2,})',
array(
'controller' => 'index',
'action' => 'index'
),
array(1 => 'id'),
'%d'
));
答案 1 :(得分:0)
使用example.com/:id
之类的自定义路由将覆盖默认路由。这会产生意想不到的后果,因为它们将不再有效example.com/:module
或example.com/:controller
。以下是我为完成您的要求所做的工作。
我想要这个静态页面的URL:
example.com/about
同时保持默认路线,这样仍然有效
example.com/:module
example.com/:controller
我这样做的方法是使用插件来测试我的请求是否可以发送。如果无法使用默认路由调度请求,那么我会将请求更改为正确的模块以加载我的页面。这是一个可以根据需要修改的插件:
class My_Controller_Plugin_StaticPageRoute extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
// Can this request be dispatched
if (!$dispatcher->isDispatchable($request)) {
// return if not a single level request
if ('default' != $request->getModuleName()
&& 'index' != $request->getActionName()) {
return;
}
// Get param to be used in new request ie. example.com/:param
$param = $request->getControllerName();
// Set the request where to try next
$request->setModuleName('default');
$request->setControllerName('index');
$request->setActionName('index');
$request->setParam('id', $param);
/** Prevents infinite loop if you made a mistake above **/
if ($dispatcher->isDispatchable($request)) {
$request->setDispatched(false);
}
}
}
}