0

我正在使用 Zend Framework v2.2.0 构建一个应用程序,并且我正在为每个部分创建不同的模块。

在一个名为 的模块中Company,有这样一条路线:

'company_wines' => array(
    'type' => 'Zend\Mvc\Router\Http\Segment',
    'options' => array(
        'route'    => '/:slug_company/:action/',
        'constraints'=>array(
            ':slug_company'=>'[a-zA-Z0-9\-_]+',
            ':action'=>'(wines|red\-wines|white\-wines|sparkling\-wines|dessert\-wines|rose\-wines){1}',
        ),
        'defaults' => array(
            'controller' => 'Company\Controller\Company',
        ),
    ),
),

在另一个名为 的模块中Vineyard,我有这条路线:

'vineyard_page' => array(
    'type' => 'Zend\Mvc\Router\Http\Segment',
    'options' => array(
        'route'    => '/vineyard/:slug_vineyard/',
        'constraints'=>array(
            ':slug_vineyard'=>'[a-zA-Z0-9\-_]+',
        ),
        'defaults' => array(
            'controller' => 'Vineyard\Controller\Vineyard',
            'action'     => 'vineyard',
        ),
    ),
),

当我使用 url 等进行测试时domain.ext/Company-name/red-wines/domain.ext/Company-name/white-winesCompany调用控制器。

如果我用 测试domain.ext/vineyard/Vineyard-name/Vineyard控制器没有被调用,仍然被调用,Company并且错误消息说控制器无法调度请求。当然VineyardnameAction()CompanyController课堂上没有调用方法。

我期待路由与正则表达式上指定:action的值列表:slug_company匹配vineyardVineyard-name

如果我用 测试:action正则表达式preg_match_all,则在像domain.ext/vineyard/Vineyard-name/.

如果我禁用Company模块或删除company_wines路线,vineyard路线正在工作。

我已经解决了为每种葡萄酒类型创建不同的路线,但我想了解我做错了什么:)

4

1 回答 1

2

您的语法错误:

'constraints' => array(
    'slug_vineyard'=>'[a-zA-Z0-9\-_]+',
),

'constraints'=>array(
    'slug_company'=>'[a-zA-Z0-9\-_]+',
    'action'=>'(wines|red\-wines|white\-wines|sparkling\-wines|dessert\-wines|rose\-wines){1}',
),

从默认/约束部分中删除冒号,它应该可以正常工作。

由于您已将冒号放在那里,因此不会强制约束,因此将使用默认约束,无论哪个路由先出现都会匹配。

于 2013-07-26T09:35:29.210 回答