Не имеет прямой связи. Что происходит, маршрутизатор вызывает свой метод route
, передающий запрос в качестве аргумента. Затем он перемещается по всем зарегистрированным маршрутам в обратном порядке, вызывая метод match
маршрута с запросом в качестве аргумента - если он соответствует ему, он устанавливает параметры запроса перед его возвратом.
Проблема заключается в том, что вы не можете напрямую вызвать Zend_Controller_Router_Rewrite :: route без изменения текущего цикла запросов, поэтому вам нужно полагаться на некоторую «fudgery» или воспроизвести логику этого метода в вашем собственном ruter sbuclass или elsehwere.
Пример жульничество:
// assume $router is your router instance, $request is the REAL request.
$testRequest = new Zend_Controller_Request_Http($url);
// need to use a try because if the route doesnt match youve got an exception coming
try {
$router->route($testRequest);
} catch(Zend_Controller_Router_Exception $e) {
$testRequest = false;
}
// revert back to the real current route which was modified during the previous call
$router->route($request);
if(false !== $testRequest) {
// consume what you need form testRequest as you normally would
print_r($testRequest->getParams());
}
я столкнулся с проблемами с этим вниз линию после того, как я начал получать в более сложных запросов lifecyles. Я не помню, почему, но я помню, что мое решение было подклассов маршрутизатора и объявления метод, route
который выглядел примерно так:
public function parseRoute(Zend_Controller_Request_Abstract $request)
{
$preservedRoute = $this->_currentRoute;
try {
$router->route($request);
$this->_currentRoute = $preservedRoute;
} catch(Zend_Controller_Router_Exception $e) {
$this->_currentRoute = $preservedRoute;
return false;
}
return $request;
}
держать Также в виду, что это все из памяти, и это было с 1,6 или 1.7 не текущая версия, поэтому YMMV. Надеюсь, это поможет.
Получил идею, спасибо за подсказку. Поскольку у моего конкретного приложения нет сложной маршрутизации, я предполагаю, что смогу пройти путь. –