#php #routing #zend-framework2
#php #маршрутизация #zend-framework2
Вопрос:
Я пытаюсь получить рабочую маршрутизацию в своем приложении на основе приложения Zend skeleton.
Мне нужно следующее сопоставление:
localhost / => Приложение / Контроллер / IndexController => indexAction() —> это работает только
localhost / portfolio / section => Приложение / Контроллер / PortfolioController => indexAction()
localhost/ portfolio /section/action/id => Application/ Controller/PortfolioController => specifi_cactionAction()
У меня есть это (module.config.php ):
'router' => array(
'routes' => array(
'home' => array(
'type' => 'ZendMvcRouterHttpLiteral',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'ApplicationControllerIndex',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'portfolio' => array(
'type' => 'ZendMvcRouterHttpSegment',
'options' => array(
'route' => '[/portfolio/:section[/:action][/:id]]',
'constraints' => array(
'section' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9] ',
),
'defaults' => array(
'__NAMESPACE__' => 'ApplicationController',
'controller' => 'Portfolio',
'action' => 'index',
),
),
),
)
),
),
),
'controllers' => array(
'invokables' => array(
'ApplicationControllerIndex' => 'ApplicationControllerIndexController',
'ApplicationControllerPortfolio' => 'ApplicationControllerPortfolioController',
),
),
Теперь, если я перейду на localhost / portfolio / graphics /, я получу сообщение об ошибке:
Произошла ошибка 404
СТРАНИЦА НЕ НАЙДЕНА.
Запрошенный URL-адрес не может быть сопоставлен с помощью маршрутизации.
Исключение не доступно
Я также пробовал в дочернем маршруте (без / при запуске):
'route' => '[portfolio/:section[/:action][/:id]]',
Я этого не понимаю. Почему это не работает?
Комментарии:
1. Ваше определение маршрута не включает завершающую косую черту —
localhost/portfolio/graphics
работает ли?2. и вы должны использовать
[portfolio/:section[/:action][/:id]]
, поскольку это дочерний элемент вашего маршрута домашней страницы. Обычно я избегаю добавления дочерних элементов в маршрут домашней страницы — хотя это кажется логичным, на практике это, похоже, излишне усложняет ситуацию.3. Да, именно так. Я пробовал оба. Но не сразу (такой придурок). Вы сэкономили мне, вероятно, много времени! Спасибо.