Проблема маршрутизации имени модуля Zend Framework 2

У меня проблема с маршрутизацией модуля. У меня есть 2 модуля, приложение и админ. Каждый модуль имеет indexAction как действие по умолчанию:

localhost / -> Приложение / индекс

localhost / admin / -> Admin / index

Admin / index работает только с localhost / admin / index /

Эта проблема возникает, когда имя модуля начинается с буквы «A». Если я переименую Admin в «Cars», localhost / cars / работает правильно!

ошибка:

A 404 error occurred The requested controller was unable to dispatch the request. Controller: Application\Controller\Application No Exception available 

Это module.config.php внутри модуля приложения:

 <?php return array( 'router' => array( 'routes' => array( 'Application' => array( 'type' => 'Segment', 'options' => array( 'route' => '[/][:action/]', 'constraints' => array( 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ), 'defaults' => array( 'controller' => 'Application\Controller\Application', 'action' => 'index', ), ), ), ), ), 'controllers' => array( 'invokables' => array( 'Application\Controller\Application' => 'Application\Controller\IndexController' ), ), 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => array( 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 'Application/Application/index' => __DIR__ . '/../view/Application/index/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ), 'template_path_stack' => array( 'Application' => __DIR__ . '/../view', ), ), ); ?> 

это module.config.php внутри модуля администратора:

  <?php return array( 'router' => array( 'routes' => array( 'Admin' => array( 'type' => 'Segment', 'options' => array( 'route' => '/admin/[:action/]', 'constraints' => array( 'action' => '[a-zA-Z][a-zA-Z0-9_-]*' ), 'defaults' => array( 'controller' => 'Admin\Controller\AdminController', 'action' => 'index' ), ), ), ), ), 'controllers' => array( 'invokables' => array( 'Admin\Controller\AdminController' => 'Admin\Controller\AdminController' ), ), 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'template_path_stack' => array( 'Admin' => __DIR__ . '/../view', ), ), ); ?> 

IndexController.php

 namespace Application\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class IndexController extends AbstractActionController { public function indexAction(){ } } 

AdminController.php

 namespace Admin\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class AdminController extends AbstractActionController { public function indexAction() {} } 

Кто-нибудь может мне помочь?

Сначала ваша ошибка The requested controller was unable to dispatch the request. происходит только тогда, когда маршрутизатор не может отправить запрос на свое определенное действие. Поэтому убедитесь, что ваш контроллер правильно, и действия присутствуют и могут быть вызваны.

Поскольку allready указал, что ваш /admin/ route будет указывать на две настроенные конечные точки. Это не проблема в первую очередь, когда маршрут администратора будет определен до маршрута приложения в конфигурации.

Таким образом, ваш маршрут /admin/ маршрут никогда не будет перенаправлен в ваш AdminController как другой динамический маршрут будет согласован первым.

Чтобы получить ожидаемый результат, используйте настройку priority в своем маршруте, чтобы убедиться, что ваш маршрут Admin будет сопоставлен до вашего маршрута Application .

 'router' => array( 'routes' => array( 'Admin' => array( 'priority' => 100, 'type' => 'Segment', 'options' => array( 'route' => '/admin/[:action/]', 'constraints' => array( 'action' => '[a-zA-Z][a-zA-Z0-9_-]*' ), 'defaults' => array( 'controller' => 'Admin\Controller\AdminController', 'action' => 'index' ), ), ), ), ), 

Помимо вашего вопроса, не заканчивайте сценарии php с помощью ?> Поскольку это может привести к ошибкам, когда пробелы после концевого тега.