有没有办法编写具有动态复合动作的Zend路由,即将多个匹配模式或匹配模式与静态文本的组合组合在一起的动作?
示例:
uri -> desired action
/company/unique-product-code/overview -> product-overview
/company/unique-product-code/gallery -> product-gallery
/company/unique-product-code/... -> product-...当前代码(不起作用):
$regexp = new Zend_Controller_Router_Route_Regex(
'^(company)/([a-z-]+)/([a-z-]+)/?',
array(),
array(1 => 'controller', 2 => 'productCode', 'product-3' => 'action')
);发布于 2013-06-06 08:39:13
我找到了你问题的几个答案。我猜这一切都取决于你想要如何构建你的Zend框架软件。
据我所知,您有一个名为Company的控制器。然后,它有各种动作,包括productOverviewAction()等。
所以,这里有几个“差不多”的解决方案--然后我将解决你目前的困境。:)
第一个可能答案
您可能希望使用控制器Company来获取公司特定信息。也许您可以制作一个名为Product的控制器来提供产品信息。然后,您实际上会想要转到类似于/product/ would id/overview- nice的内容。下面是与之匹配的路径:
$route = new Zend_Controller_Router_Route(
'product/:productCode/:action',
array(
'controller'=>'product'
)
);如你所见,它甚至不是一个正则表达式,所以它可以很快!
第二个可能答案
需要正则表达式的原因是,操作与url不匹配,而是由url的一部分组成。但是,假设您将Company::productOverviewAction()更改为Company::OverviewAction() -然后可以使用以下路径:
$route = new Zend_Controller_Router_Route(
'company/:productCode/:action',
array(
'controller'=>'company'
)
);但是,我知道这不是你想要的.
几乎完全正确的答案
无需修改路由类,即可使用以下路由器:
$route = new Zend_Controller_Router_Route(
'company/:productCode/:action',
array(
'controller'=>'company'
)
);然后,因为它被定向到每个操作,所以您可以代理CompanyController中的操作。例如:
public function overviewAction()
{
return $this->productOverviewAction();
}*注意:我没有使用_forward()作为不重新调度(我认为会发生这种情况...)
祝你好运!
发布于 2013-06-06 01:53:01
实际上,我不认为使用标准路由类可以做到这一点。您可以扩展路由器、扩展regexp路由类或使用控制器插件来操作匹配的操作名称;但实际上,如果您可以更改控制器中的操作名称以匹配URL中的操作,则会容易得多。
https://stackoverflow.com/questions/16945138
复制相似问题