我正在使用Zend Framework,并尝试设置一些自定义路由.
这些在分发期间似乎工作正常,但是反向匹配根本不起作用.
这些是我设置的路线.
$router->addRoute('category', new Zend_Controller_Router_Route(
'categories/:category',
array(
'controller' => 'category',
'action' => 'modify',
)
));
$router->addRoute('categories', new Zend_Controller_Router_Route_Static(
'categories',
array(
'controller' => 'category',
'action' => 'index'
)
));
如果现在转到http://example.com/categories,将执行正确的控制器和操作(category.index).如果转到http://example.com/categories/5,则会出现以下错误:
Fatal error: Uncaught exception 'Zend_Controller_Router_Exception' with
message 'category is not specified'
将默认值添加到:category可以解决此问题,原因是(建议).
但这不是主要问题.
每当我的应用程序执行$this-> url(…)时,返回的值始终是当前URL.因此,在http://example.com/categories上,如果我运行
echo $this->url(
array('controller' => 'category', 'action' => 'modify', 'category' => 5)
);
返回值是http://example.com/categories.我完全陷入了困境.
即使我尝试绕过默认路由器并执行此操作,问题仍然存在
$router->removeDefaultRoutes();
$router->addRoute('default', new Zend_Controller_Router_Route(
'*',
array('controller' => 'index', 'action' => 'index')
));
对Zend路由有更多经验的人是否想对此有所了解?
干杯,
乔恩
解决方法:
尝试更改此行
echo $this->url(array('controller' => 'category', 'action' => 'modify', 'category' => 5))
进入
echo $this->url(array('controller' => 'category', 'action' => 'modify', 'category' => 5), 'category')
第二个参数是url函数应使用的路由名称.如果未通过,则帮助程序将使用当前路线.
@编辑
经过更深入的研究,我找到了解决您问题的另一种解决方案,如果您不想每次都通过路由器名称,则代码应如下所示:
$router->addRoute('category', new Zend_Controller_Router_Route(
'categories/:id',
array(
'controller' => 'category',
'action' => 'modify',
'id' => 0
),
array(
'id' => '\d+'
)
));
$router->addRoute('categories', new Zend_Controller_Router_Route_Static(
'categories',
array(
'controller' => 'categories',
'action' => 'index'
)
));
这将设置路由器部分,现在在视图中调用url helper.
<?php echo $this->url(array('controller' => 'category', 'action' => 'modify', 'id' => 5), null, true);?><br/>
<?php echo $this->url(array('controller' => 'category', 'action' => 'index'), null, true);?><br/>
输出应为:
/ categories / 5
/类别