php - Laravel 4 除了 Controller 构造函数中的过滤器

标签 php laravel laravel-4

目前我有一个 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/

相关文章:

php - Google Cloud Storage 一个文件同时访问多个

javascript - 在 PHP 中使用序列化 jQuery 传递多个参数

php - Laravel 框架无法启动,为什么?

laravel - 有效载荷对于 laravel_session 解密无效

php - 创建一个可以访问我的模型的 Laravel 5.1 中间件

php - Laravel 4 - 在验证类中访问身份验证类

laravel - 在查询生成器 laravel 中,datediff < 15 从今天开始

javascript - 永无止境的循环?

laravel - [Vue 警告] : Cannot find element: #app

Laravel 5.3 查询构建器 : 'NOTLIKE' not working