我正在使用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