我正在使用Zend Framework v2.2.0构建应用程序,并且为每个部分创建不同的模块。Zend Framework 2 - 分段路由
在一个模块中,称为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-wines
测试等等,Company
控制器被调用。
如果我domain.ext/vineyard/Vineyard-name/
测试中,Vineyard
控制器不会被调用,仍调用Company
一个错误消息说,该控制器不能分派请求。当然,CompanyController
课程中没有VineyardnameAction()
的方法。
我期待,关于正则表达式指定:action
对值列表中的路由匹配,此外,如果:slug_company
正则表达式匹配“标志” vineyard
,那么就没有行动符合Vineyard-name
一部分......
如果我使用preg_match_all
测试:action
正则表达式,则在domain.ext/vineyard/Vineyard-name/
这样的字符串中找不到任何内容。
如果我禁用Company
模块或删除company_wines
路由,vineyard
路由正在工作。
我已经解决了创建每个葡萄酒类型不同的路线,但我想了解whath我做错了:)
此外,这些路由在配置级定义的顺序很重要,因为字符串'vineyard'也与'slug_company'的正则表达式匹配... – Sam
@Andrew,谢谢!我真的是小白:D – Gabriel
@sam你是对的,但网址和约束应该完全评估,对吧? – Gabriel