【问题标题】:How to apply multiple filters on Laravel 4 route group?如何在 Laravel 4 路由组上应用多个过滤器?
【发布时间】:2014-06-07 02:14:57
【问题描述】:

是否可以在 Laravel 4 中的组路由上添加多个过滤器?

对于以 API 为中心的应用程序,我有 2 种身份验证方法。 一种带有标准身份验证(过滤“auth”用于网站),一种带有令牌(过滤“auth.token”用于移动应用)。

<?php
    Route::group(array('prefix' => 'api/'), function() {
        #Custom routes here
    });
?>

理想情况下,我希望 如果两个过滤器之一通过,则可以访问组。

【问题讨论】:

    标签: php laravel-4


    【解决方案1】:

    你可以用 laravel 做到这一点

    Route::group(array('prefix' => 'api/', 'before' => 'filter1|filter2'), function()
    {
        Route::get('api1', function()
        {
            // Has Filter1 and filter2
        });
    
        Route::get('api2', function()
        {
            // Has filter1 and filter2
        });
    });
    

    查看documentation了解更多详情

    【讨论】:

    • 操作要求 OR 你已经解释了如何做 AND。 |在 before 属性中表示 AND,它实际上只是一个数组分隔符。
    【解决方案2】:

    你可以:

    Route::group(['before' => 'auth|csrf'], function()
    {
         //
    });
    

    但是,如果您想在 任何一个 过滤器通过时使其可访问,则必须多写一点(在 filters.php 中):

    function csrfFilter()
    {
        if (Session::token() != Input::get('_token'))
        {
            throw new Illuminate\Session\TokenMismatchException;
        }
    }
    function authFilter()
    {
        if (Auth::guest()) return Redirect::guest('login');
    }
    
    Route::filter('csrf-or-auth', function () 
    {
        $value = call_user_func('csrfFilter');
        if ($value) return $value;
        else return call_user_func('authFilter');
    });
    

    在 routes.php 中

    Route::group(['before' => 'csrf-or-auth'], function()
    {
         //
    });
    

    请记住,当过滤器通过时,您必须不返回任何内容。 希望对你有帮助!

    【讨论】:

    • 存在语法错误。应该放在routes.php文件中的代码必须是Route::group(array('before' =&gt; 'csrf-or-auth'), function() { });
    • 谢谢@Amr。现在已经修复了
    • 您仍然需要删除最后 2 个括号之一(它们存在于分号之前)。并对代码的第一个 sn-p 应用相同的更改。
    猜你喜欢
    • 2015-01-29
    • 2013-01-10
    • 1970-01-01
    • 2015-08-30
    • 2013-11-12
    • 1970-01-01
    • 2014-03-02
    • 2014-11-15
    • 1970-01-01
    相关资源
    最近更新 更多