Я создаю приложение, используя 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-wines
и т. д., вызывается контроллер Company
.
Если я тестирую с domain.ext/vineyard/Vineyard-name/
, контроллер Vineyard
не вызывается, по-прежнему вызывается Company
, и в сообщении об ошибке говорится, что контроллер не может отправить запрос. Конечно, в классе CompanyController
нет метода с именем VineyardnameAction()
.
Я ожидал, что маршрут будет соответствовать списку значений, указанных в регулярном выражении для :action
, а также, если регулярное выражение :slug_company
соответствует "флагу" vineyard
, то нет действия, соответствующего части Vineyard-name
...
Если я проверю регулярное выражение :action
с помощью preg_match_all
, ничего не будет найдено в строке, подобной domain.ext/vineyard/Vineyard-name/
.
Если я отключу модуль Company
или удалю маршрут company_wines
, маршрут vineyard
будет работать.
Я решил создать разные маршруты для каждого типа вин, но я хотел бы понять, что я делаю неправильно :)