我想以多个字符串路由到同一个控制器的方式配置我的Zf2应用程序。例如www.mysite.com/this和www.mysite.com/都会路由到同一个控制器并且可以使用$ this-> params捕获它们。我将如何完成这样的事情?我需要2个单独的路线声明吗?
'directory' => [
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => [
'route' => '/string1 || /string2 || /string3',
'defaults' => [
'controller' => 'Application\Controller\MyController',
'action' => 'index'
],
],
]
答案 0 :(得分:2)
最简单的IMO解决方案是:
'varcatcher' => [
'type' => 'Segment',
'options' => [
'route' => '[/[:tail]]',
'defaults' => [
'controller' => '\Application\Controller\Index',
'action' => 'catch',
'module' => 'Application',
],
'constraints' => [
'tail' => '[a-zA-z0-9_-]*'
],
],
'may_terminate' => true,
],
然后在你的行动中处理它:
public function catchAction(){
die( $this->params()->fromRoute('tail') );
}
因为ZF2路线是LIFO。通过先插入它来处理它,并处理你需要捕获的任何情况,这可能是最佳选择。
提到LIFO,是因为如果你定义路线后'在路由器阵列中,这些将在全能之前,如果我正确地阅读你的问题,这似乎是有益的。
干杯! 亚历
答案 1 :(得分:1)
您可以使用Zend\Mvc\Router\Http\Regex路由类型,而不是Literal类型,并执行类似
的操作jQuery(function ($) {
$('#products').find('.button').on('click', function () {
var id = $(this).data('id');
$.ajax({
url: 'path/to/ajax.php',
data: {
id: id
},
method: 'POST',
success: function (html) {
$('body').append(html);
$(html).bPopup();
},
error: function (returnValue) {}
});
});
});
答案 2 :(得分:0)
截至Literal route定义创建3条路线:
'directory1' => [
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => [
'route' => '/string1',
'defaults' => [
'controller' => 'Application\Controller\MyController',
'action' => 'index',
],
],
],
'directory2' => [
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => [
'route' => '/string2',
'defaults' => [
'controller' => 'Application\Controller\MyController',
'action' => 'index',
],
],
],
'directory3' => [
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => [
'route' => '/string3',
'defaults' => [
'controller' => 'Application\Controller\MyController',
'action' => 'index',
],
],
],