из документации Я могу назвать это так

Route::get('profile', array('before' => 'auth',
            'uses' => 'UserController@showProfile'));

Маршрутизатор создаст Маршрут со свойством before

В Route->run следующее называется

list($name, $params) = $this->parseFilter($name, $params);

if ( ! is_null($callable = $this->router->getFilter($name)))
{
   return call_user_func_array($callable, $params);
}

Мой вопрос: как маршрутизатор узнает имя фильтра. Я следую методу createRoute?

Благодарность

1
Richard 19 Май 2014 в 13:23

2 ответа

Лучший ответ

Я полагаю, вы спрашиваете о Laravel 4.0, просто догадываясь из предоставленного вами фрагмента кода. Код в модуле Routing немного изменен в Laravel 4.1.

Маршрутизатор знает имя фильтра, потому что маршрутизатор хранит эти данные !.

Начнем с создания предварительного фильтра. При создании метода before filter before() в классе маршрута вызывается.

public function before()
{
    $this->setBeforeFilters(func_get_args());

    return $this;
}

В этой функции параметры считываются func_get_args функция.

Затем имя фильтра и параметры фильтра устанавливаются во внутреннее хранилище данных с помощью метода setBeforeFilters.

Надеюсь, это ответит на ваш вопрос. (Если я правильно понял)

0
tharumax 7 Фев 2021 в 20:06

Я не совсем уверен в том, о чем вы спрашиваете, но в Laravel есть два фильтра - before и after.

Перед запуском фильтров перед вызовом вашего маршрута. Вы можете прикрепить к своему before столько фильтров, сколько захотите, например: 'before' => 'auth|other|example'. В этом случае он будет запускать auth, other и example (в указанном порядке).

Вы можете сделать то же самое с фильтрами after.

Эти фильтры можно применить в файле маршрутов, как в вашем примере.

Route::get('profile', array('before' => 'auth',
            'uses' => 'UserController@showProfile'));

Или они могут быть применены внутри контроллера, если вам это нравится.

class UserController extends BaseController {

    public function __construct()
    {
        $this->beforeFilter('auth');
    }
}

Вы также можете указать в фильтрах контроллера, что фильтры применяются только к определенным маршрутам.

public function __construct()
{
    $this->beforeFilter('csrf', array('on' => 'post'));
}

Или вы можете сказать, что это применимо ко всем маршрутам, кроме определенных маршрутов

public function __construct()
{
    $this->beforeFilter('auth', array('except' => 'post'));
}
2
Laurence 19 Май 2014 в 10:10