Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.07.2014 10:04:49

After-фильтр не отрабатывает.

Здравствуйте. И снова пишу вам, уважаемые эксперты Laravel smile. Дело такое:
- Есть фильтр (конечно это урезанный вариант, в таком виде его я использовать не буду):

Route::filter('test', function()
{
    return Redirect::to('/');
});

И есть маршрут:

Route::get('test', array(
    'after' => 'test',
    function(){
        return 'TEST';
    }
));

Так вот, теперь вопрос: почему это не работает? smile Т.е. если заместо "after" там вписать "before" - то всё правильно отрабатывает и меня перенаправляет на главную страницу сайта. А в таком виде лишь выводится "TEST", никакого перенаправления не происходит.
Пробовал в интернете поискать, каким образом фильтры работают, ничего путного не нашёл. Думаю это в особенностях after-фильтра что-то...

Не в сети

#2 05.07.2014 14:41:45

Re: After-фильтр не отрабатывает.

after-фильтры не могут изменять сгенерированный ответ, они могут только его читать. Как всегда — если не помогает Интернет нужно обратиться к первоисточнику. vendor\laravel\framework\src\Illuminate\Routing\Router.php:

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;
    }

Не в сети

Подвал раздела