目前我有一个 AdminContoller,它有一个构造方法来处理一些之前的过滤器。有没有办法对除一个之外的所有 Controller 方法执行前置过滤器?
我将 Entrust 用于角色和权限,但此代码使我陷入无限重定向循环。我根本没有以用户身份登录。所以这段代码应该将我重定向到附加到未过滤的 AdminController@adminLogin 方法的/admin/login url。但事实并非如此?
//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');
最佳答案
当您将新方法添加到足智多谋的 Controller 中时,您应该先注册新方法,然后再注册资源。
例如
<?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'));
}
}
关于php - Laravel 4 除了 Controller 构造函数中的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076011/