Jas*_*nNZ 5 php laravel laravel-4
目前我有一个AdminContoller,它有一个构造方法来处理一些之前的过滤器.除了一个控制器方法之外,有没有办法对所有控制器方法进行过滤?
我正在使用Entrust for Roles and Permissions,但是这段代码让我陷入无限重定向循环.我根本没有以用户身份登录.因此,此代码应将我重定向到/ admin/login url,该URL附加到未经过滤的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
}
Run Code Online (Sandbox Code Playgroud)
// Filter.php文件
Route::filter('admin', function()
{
if( !Entrust::hasRole('admin') ) // Checks the current user
{
return Redirect::to('/admin/login');
}
});
Run Code Online (Sandbox Code Playgroud)
// Routes.php文件
Route::resource('admin', 'AdminController');
Route::get('/admin/login', 'AdminController@adminLogin');
Run Code Online (Sandbox Code Playgroud)
当您在资源控制器中添加新方法时,应首先在资源之前注册新方法.
例如
<?php // Routes.php
Route::get('/admin/login', 'AdminController@adminLogin');
Route::resource('admin', 'AdminController');
Run Code Online (Sandbox Code Playgroud)
这样你的前置过滤器就可以像你一样工作了:
<?php // AdminController.php
class AdminController extends BaseController {
function __construct() {
$this->beforeFilter('admin', array('except' => array('adminLogin')));
$this->beforeFilter('csrf', array('on' => 'post'));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10777 次 |
最近记录: |