带前缀的ZF2路由默认不起作用

时间:2014-09-03 07:44:32

标签: php routing routes zend-framework2 zend-route

我想添加crm作为CRM模块的前缀。

这是我的module.config.php中的路由器部分

'router' => array(
        'routes' => array(          
            'calendar' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/crm/calendar[/:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Crm\Controller\Calendar',
                        'action'     => 'index',
                    ),
                ),
            ),

当我使用test.dev/crm/calendar/index工作正常时。但它不适用于test.dev/crm/calendar。我找不到任何问题。

当我使用'route' => '/calendar[/:action][/:id]',时,我可以使用test.dev/calendar。但我需要使用前缀。我该怎么做?

3 个答案:

答案 0 :(得分:1)

我认为您可能需要添加'may_terminate' => true,

所以你的路线定义如下:

'calendar' => array(
    'type'    => 'segment',
    'options' => array(
        'route'    => '/crm/calendar[/:action][/:id]',
        'constraints' => array(
            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
            'id'     => '[0-9]+',
        ),
        'defaults' => array(
            'controller' => 'Crm\Controller\Calendar',
            'action'     => 'index',
        ),
    ),
    'may_terminate' => true,
),

尝试是否有效。

否则你也可以拆分它并使crm成为文字路径。

'crm' => array(
    'type' => 'literal',
    'options' => array(
        'route' => '/crm',
    ),
    'may_terminate' => false,
    'child_routes' => array(
        'calendar' => array(
            'type'    => 'segment',
            'options' => array(
                'route'    => '/calendar[/:action][/:id]',
                'constraints' => array(
                    'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    'id'     => '[0-9]+',
                ),
                'defaults' => array(
                    'controller' => 'Crm\Controller\Calendar',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
),

但是这最后一个解决方案意味着您将始终必须路由到crm/calendar

答案 1 :(得分:0)

看到配置应该纠正。 你没试过/(test.dev/crm/calendar,而不是test.dev/crm/calendar /)

答案 2 :(得分:0)

路线配置正确。此路由已从另一个模块路由写入。这就是问题所在。 ZF2并不容易检查所有路线和路径。