我是Zend Framework的新手,我正在尝试解决如何在application.ini文件中添加其他路由。
我目前的路线设置如下:
resources.router.routes.artists.route = /artists/:stub
resources.router.routes.artists.defaults.controller = artists
resources.router.routes.artists.defaults.action = display
...以便 / artists / joe-bloggs 使用“艺术家”控制器的“显示”动作来播放有问题的艺术家的个人资料 - 效果很好。
我现在要做的是设置另一条路线,以便 / artists / joe-bloggs / random-gallery-name 进入“艺术家”控制器的“画廊”动作。
我尝试在application.ini文件中添加一个额外的块(在上面的块下面),如下所示:
resources.router.routes.artists.route = /artists/:stub/:gallery
resources.router.routes.artists.defaults.controller = artists
resources.router.routes.artists.defaults.action = galleries
...但是当我这样做时, / artists / joe-bloggs 的页面不再有效(Zend尝试将其路由到“joe-bloggs”控制器)。
如何在application.ini中设置路由,以便根据“/:gallery”是否存在来更改“艺术家”控制器的操作?
我意识到我可能犯了一个非常愚蠢的错误,所以请指出我的愚蠢并让我走上正确的道路(没有任何双关语)。
答案 0 :(得分:4)
尝试颠倒路线的顺序。 ZF按照添加的相反顺序匹配路由(以便默认路由是最后匹配的路径)
如果这不起作用,您可能必须使用可选组件调查正则表达式路由。
答案 1 :(得分:3)
您的第二个区块需要有不同的路线名称,将“艺术家”字词重命名为与您的新区块类似的字样:
resources.router.routes.artists-gal.route = /artists/:stub/:gallery
resources.router.routes.artists-gal.defaults.controller = artists
resources.router.routes.artists-gal.defaults.action = galleries
答案 2 :(得分:1)
我通常在application / Bootstrap.php(或者你的Bootstrap.php文件所在的位置)设置路由
添加如下方法:
protected function _initRoutes()
{
$ctrl = Zend_Controller_Front::getInstance();
$router = $ctrl->getRouter();
$router->addRoute(
'artist_detail',
new Zend_Controller_Router_Route('artists/:stub',
array('controller' => 'artists',
'action' => 'display'))
);
$router->addRoute(
'artist_detail_gallery',
new Zend_Controller_Router_Route('artists/:stub/:gallery',
array('controller' => 'artists',
'action' => 'gallery'))
);
}
就检查天气而言,特定艺术家有一个画廊,就我的例子而言,我会在ArtistsController中有一个galleryAction方法
检查“&stub”存根是否存在图库。请求参数,如果它没有扔404:
throw new Zend_Controller_Action_Exception("Object does not exist", 404);
或将它们重定向到其他页面:
return $this->_helper->redirector('index', 'index'); //redirect to index action of index controller
希望这有帮助。