Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте. И снова пишу вам, уважаемые эксперты Laravel . Дело такое:
- Есть фильтр (конечно это урезанный вариант, в таком виде его я использовать не буду):
Route::filter('test', function()
{
return Redirect::to('/');
});
И есть маршрут:
Route::get('test', array(
'after' => 'test',
function(){
return 'TEST';
}
));
Так вот, теперь вопрос: почему это не работает? Т.е. если заместо "after" там вписать "before" - то всё правильно отрабатывает и меня перенаправляет на главную страницу сайта. А в таком виде лишь выводится "TEST", никакого перенаправления не происходит.
Пробовал в интернете поискать, каким образом фильтры работают, ничего путного не нашёл. Думаю это в особенностях after-фильтра что-то...
Не в сети
after-фильтры не могут изменять сгенерированный ответ, они могут только его читать. Как всегда — если не помогает Интернет нужно обратиться к первоисточнику. vendor\laravel\framework\src\Illuminate\Routing\Router.php:
/**
* Dispatch the request to a route and return the response.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
public function dispatchToRoute(Request $request)
{
$route = $this->findRoute($request);
$this->events->fire('router.matched', array($route, $request));
// Once we have successfully matched the incoming request to a given route we
// can call the before filters on that route. This works similar to global
// filters in that if a response is returned we will not call the route.
$response = $this->callRouteBefore($route, $request);
if (is_null($response))
{
$response = $route->run($request);
}
$response = $this->prepareResponse($request, $response);
// After we have a prepared response from the route or filter we will call to
// the "after" filters to do any last minute processing on this request or
// response object before the response is returned back to the consumer.
$this->callRouteAfter($route, $request, $response);
return $response;
}
Не в сети
Страницы 1