#php #regex #zend-framework
#php #регулярное выражение #zend-framework
Вопрос:
У меня есть модуль в zend framework, к которому я могу получить доступ с помощью этого URL : www.example.com/questionnaire/
Я хотел бы изменить questionnaire
URL-адрес на questionnaire-test
.
Это код, который я извлек из Bootsrap.php
файла, но не могу понять, что мне нужно изменить.
if(!in_array('backoffice', $layout) amp;amp; (in_array('questionnaire', $layout))){
$langRoute = new Zend_Controller_Router_Route(
':lang/',
array(
'lang' => 'fr',
)
);
$defaultRoute = new Zend_Controller_Router_Route(
':controller/:action',
array(
'module'=>'questionnaire',
'controller'=>'index',
'action'=>'index'
)
);
$defaultRoute = $langRoute->chain($defaultRoute);
$router->addRoute('langRoute', $langRoute);
$router->addRoute('defaultRoute', $defaultRoute);
/*---------------------------------*/
$router->addRoute('home',
new Zend_Controller_Router_Route_Regex(
'([a-z]{2})/',
array(
'module'=>'questionnaire',
'controller'=>'index',
'action'=>'index'
),
array(
1 => 'lang',
),
'%s/'
)
);
}
Ответ №1:
Кажется, что ваше определение является домашним маршрутом www.example.com/en/
, а не www.example.com/en/questionnaire/
. Правильное определение должно быть следующим, если вы ищете www.example.com/en/questionnaire-test/
:
$router->addRoute('questionnaire',
new Zend_Controller_Router_Route_Regex(
'([a-z]{2})/questionnaire-test',
array(
'module'=>'questionnaire',
'controller'=>'index',
'action'=>'index'
),
array(
1 => 'lang',
),
'%s/questionnaire-test'
)
);
Комментарии:
1. Я обновил свой вопрос, добавив больше кода, который может вам подойти для домашнего маршрута. С помощью предоставленного вами кода мне удается получить доступ к модулю,
www.example/questionnaire/questionnaire-test
но я не могу изменить первое появление «вопросника»2. Вы уверены, что это единственные определения маршрута? Например, в плагине контроллера могут быть другие определения..
Ответ №2:
Стандартный маршрутизатор Zend_Controller_Router_Rewrite
по умолчанию использует маршрут, который будет соответствовать по имени :module/:controller/:action request . Вы можете отключить это, вызвав
$router->removeDefaultRoutes();
Это должно заставить маршрутизатор работать только на основе определенных вами маршрутов. Тогда вы сможете получить доступ к модулю следующим образом:
$router->addRoute(new Zend_Controller_Router_Route('questionnaire-test/:controller/:action', array(
'module' => 'questionnaire',
'controller' => 'index',
'action' => 'index')));