Я использую этот конфиг как мой модуль приложения конфигурация в Zend2, который действительно нормально, и каждый предлагаемый в качестве стандартного правила маршрутизации:Zend2 маршрутизация __NAMESPACE__ не работает или игнорироваться
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController',
),
),
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'index',
),
),
),
'application' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
),
),
маршрутизации home
работает отлично. но http://localhost/application
я получаю:
Index (решает недопустимый класс контроллера или псевдоним: Index)
и http://localhost/application/index/index
я получаю:
индекса (устраняющий недопустимый класс контроллера или псевдоним: индекс)
если я это изменение:
'application' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
к этому:
'application' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'index',
),
),
Как вы знаете, безусловно, для http://localhost/application
она будет прекрасно работать как home
URL
, если я использую это:
'controllers' => array(
'invokables' => array(
'index' => 'Application\Controller\IndexController',
),
),
как вы знаете конфигурации объединится, и у меня должен быть только один контроллер индекса в проекте.
Почему строка '__NAMESPACE__' => 'Application\Controller',
игнорируется, и она ищет только индекс или индекс в массиве контроллеров, который не существует?
EDIT:
С по сравнению с другими проектами, которые я добавил это Application/Module.php
:
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
}
и он работает сейчас, но мне нужно, и объяснение. это решение? Я хотел бы добавить это в один из Module.php
файлов в проекте, чтобы правила маршрутизации работали нормально? и почему без него __NAMESPACE__
будет проигнорирован в правилах маршрутизации?
Thx, поэтому __NAMESPACE__ не будет проверяться без использования ModuleRouteListener? –
@ S.Голизаде Точно – Wilt