Я работаю с URL в следующем формате: «контроллер / действие», где требуется косая черта.
Мне нужно создать регулярное выражение PCRE, чтобы оно соответствовало именам контроллера и действия, если имя контроллера не имеет значения "home". Например:
- "member / update" должен производить "member", "update"
- «admin / index» должен выдавать «admin», «index»
- "home / index" должен дать
<nomatch>
Я играл с взглядом вперед, назад и вокруг, и у меня есть части этого, но не совсем правильное решение. Любая помощь приветствуется.
** РЕДАКТИРОВАТЬ
Вот немного больше фона. Я хочу настроить Zend маршрутизацию так, чтобы
- URL-адрес с одной частью, отправляемый '/ foo' в HomeController, т.е. '/ home / foo'
- любой URL с двумя частями «/ controller / action» отправляется этому контроллеру: например, «/ member / update» отправляет MemberController, «/ member / update»; '/ home / index' отправляет в HomeController и т. д.
Сейчас у меня есть маршруты, настроенные как:
$router->addRoute('homeRoute',
new Zend_Controller_Router_Route(
':action',
array('controller' => 'home', 'action' => 'index')
)
);
$router->addRoute('memberRoute',
new Zend_Controller_Router_Route(
'member/:action',
array('controller' => 'member', 'action' => 'index')
)
);
// and so on, a route for each non-Home controller: adminRoute, etc
Это работает так, как я хочу, но это уродливо и проблема с обслуживанием. Я хочу заменить все маршруты 'memberRoute', 'adminRoute' и т. Д. Одним маршрутом Regex:
$router->addRoute('siteRoute',
new Zend_Controller_Router_Route_Regex(
'????/:action',
array('action' => 'index'),
array(?? => 'controller')
)
);
Я проводил свои эксперименты с регулярными выражениями с небольшим PHP-скриптом вроде:
<?php
preg_match('/????/', 'home/index', $output);
echo '0=>'.$output[0].';';
echo '1=>'.$output[1].';';
?>