Я создаю приложение с помощью 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
части ...
Если я тестирую regex :action
с preg_match_all
, ничего не найдено в строке, как domain.ext/vineyard/Vineyard-name/
.
Если я отключу модуль Company
или удаляю маршрут company_wines
, vineyard
маршрут работает.
Я решил создавать различные маршруты для каждого типа вина, но я хотел бы понять whath я делаю неправильно :)
Кроме того, порядок, в котором эти маршруты определены на уровне конфигурации, важен, поскольку строка 'vineyard' также соответствует регулярному выражению для' slug_company' ... – Sam
@Andrew, спасибо! Я действительно noob: D – Gabriel
@sam вы правы, но url и ограничения должны оцениваться полностью, не так ли? – Gabriel