ZF2将多个字符串路由到同一个控制器?

时间:2015-06-17 18:40:10

标签: zend-framework routing routes zend-framework2 url-routing

我想以多个字符串路由到同一个控制器的方式配置我的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'
           ],
      ],
]

3 个答案:

答案 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',
           ],
      ],
],