Как вызвать фильтр для необходимых действий контроллера ресурсов?

У меня есть контроллер ресурсов Items:

Route::resource('items', 'ItemsController');

И в действии [email protected] для создания нового элемента мне нужно активировать CSRF filter (и, возможно, Auth filter) перед действиями с формой. Но я не могу написать

$this->beforeFilter('csrf')

он не работает. Он работает, когда я помещаю это вызов в родительский контроллер __construct().

Что мне нужно сделать, чтобы вызвать некоторые фильтры непосредственно для действий контроллера ресурсов?

Ответ 1

Вы должны иметь возможность использовать фильтры для определенных действий, только установив их в __construct() следующим образом:

class ItemsController extends BaseController
{
    public function __construct()
    {
        $this->beforeFilter('csrf', array('on' => 'store') );
    }

    //rest of controller... 
}

Примечание. Вы также можете использовать ключевые слова "только" и "за исключением" и передать массив имен действий для применения (или отрицания) фильтра для более чем одного действия.

Ответ 2

Обычно вы можете использовать конструктор Route::resource(). Используйте этот код:

Route::resource('items', 'ItemsController', ['before' => 'csrf']);