Laravel 4 кроме фильтра в конструкторе контроллера

В настоящее время у меня есть AdminContoller с методом конструктора, который обрабатывает некоторые из ранее фильтров. Есть ли способ сделать фильтр до всех методов контроллера, кроме одного?

Я использую Entrust для ролей и разрешений, но этот код бросает меня в бесконечный цикл перенаправления. Я вообще не вошел в систему как пользователь. Поэтому этот код должен перенаправить меня на URL-адрес / admin / login, который прикреплен к нефильтрованному методу AdminController @ adminLogin. Но это не так?

// Файл AdminController.php

class AdminController extends BaseController { function __construct() { // Is something like this possible? $this->beforeFilter('admin', array('except' => array('adminLogin'))); $this->beforeFilter('csrf', array('on' => 'post')); } public function index() { return "Admin - Index"; } public function adminLogin() { return "Admin Login Form"; } // ... and many more methods } 

// Файл Filter.php

 Route::filter('admin', function() { if( !Entrust::hasRole('admin') ) // Checks the current user { return Redirect::to('/admin/login'); } }); 

// Файл Routes.php

 Route::resource('admin', 'AdminController'); Route::get('/admin/login', 'AdminController@adminLogin'); 

Когда вы добавили новый метод в находчивый контроллер, сначала необходимо зарегистрировать новый метод перед ресурсом.

Например

 <?php // Routes.php Route::get('/admin/login', 'AdminController@adminLogin'); Route::resource('admin', 'AdminController'); 

Таким образом, ваши фильтры должны работать так, как вам нужно:

 <?php // AdminController.php class AdminController extends BaseController { function __construct() { $this->beforeFilter('admin', array('except' => array('adminLogin'))); $this->beforeFilter('csrf', array('on' => 'post')); } } 

Да, это возможно, потому что существует public $except; и public $only; свойство в классе Filter в vendor/laravel/framework/src/Illuminate/Routing/Controllers/Filter.php и вы также можете использовать его вместо использования фильтра только для определенных методов.

Из документов L4 only для

  $this->afterFilter('log', array('only' => array('fooAction', 'barAction'))); 

Таким образом, это тоже должно работать

 $this->beforeFilter('log', array('except' => array('fooAction', 'barAction'))); 

В L3 я использовал

 $this->filter('before', 'auth')->except(array('login', 'login_ajax', 'fb_login')); 

но не использовать в L4 но он должен работать, в соответствии с исходным кодом и документом.