В ZF1 вам не нужно было включать модуль в URL-адрес; если бы он не был предоставлен, по умолчанию использовался бы... модуль по умолчанию. Как это можно сделать в ZF2? Я использовал скелетное приложение для запуска и работы, но кажется, что мне всегда нужно включать имя модуля, например. /application/controller/action
.
Я подумал, что могу обойти это, создав маршрут с двумя «заполнителями»; контроллер и действие, а затем установите модуль по умолчанию на «приложение». Затем я бы поместил это в /config/autoload/global.php
(или, возможно, /config/application.config.php
), чтобы маршрут применялся ко всему моему приложению. Однако я получаю сообщение об ошибке, что URL-адрес не может быть сопоставлен с маршрутизацией, даже если я жестко запрограммирую маршрут на что-то вроде /user/index
.
Я попробовал код ниже.
return array(
'router' => array(
'routes' => array(
'nomodule' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'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(
'module' => 'Application' // Not sure of the syntax here
)
)
),
)
)
);
Как я писал в качестве комментария, я не уверен, связана ли моя проблема с синтаксисом по умолчанию, но я бы так не думал, поскольку то же самое произойдет, если я жестко запрограммирую маршрут и удалю все значения по умолчанию. Я также пытался поэкспериментировать с ним на основе примеров в скелетном приложении, но безуспешно. Я иду об этом неправильно? Есть ли лучший подход? Или я просто ошибся?
Заранее спасибо.
Изменить. Код, который заставит его работать, см. в ответе. Чтобы узнать, как это работает, прочитайте этой статьи.