带有Route :: resource的'auth'中间件

时间:2015-02-08 11:08:37

标签: authentication laravel laravel-4 middleware

如何将中间件与资源一起使用?

Route::resource('myitem', ['middleware' => 'auth', 'uses' => 'App\\Controllers\\MyitemsController']);

刚刚关注https://laracasts.com/discuss/channels/general-discussion/struggling-with-routeresource-and-auth-middleware,但遗憾的是无法解决。

获取错误:

ErrorException (E_UNKNOWN) 
Array to string conversion
Open: /vendor/laravel/framework/src/Illuminate/Routing/Router.php

protected function getResourceAction($resource, $controller, $method, $options)
{
    $name = $this->getResourceName($resource, $method, $options);

    return array('as' => $name, 'uses' => $controller.'@'.$method);
}

5 个答案:

答案 0 :(得分:3)

中间件是Laravel 5的一个新功能。在Laravel 4中,过滤器类似的东西。因此,您应该使用middlewarebefore而不是使用密钥after。此外,以及错误来自的地方,Route::resource的第二个参数应该是控制器名称作为字符串,第三个参数是一个选项数组:

Route::resource('myitem', 'App\\Controllers\\MyitemsController', ['before' => 'auth']);

修改

显然,在过滤器只围绕它时,过滤器只能处理资源路由。有关示例,请参阅OP答案......

答案 1 :(得分:3)

使用带资源的过滤器无效,为什么必须使用Route::group

Route::group(array('before' => 'auth'), function()
{
    Route::resource('myitem', 'App\\Controllers\\MyitemsController');
});

https://stackoverflow.com/a/17512478/540144

答案 2 :(得分:0)

我刚刚反对这一点,发现最简单的方法是将中间件直接添加到控制器。

我在这里找到了答案: http://laravel.com/docs/master/controllers

class MyitemsController extends Controller {

    /**
     * Instantiate a new MyitemsController instance.
     */
    public function __construct()
    {
        $this->middleware('auth');
    }
}

答案 3 :(得分:0)

如何在 Laravel 5 中执行此操作。你一直在等待的答案。

使用middleware代替before

Route::group(array('middleware' => 'auth'), function()
{
    Route::resource('user', 'UserController',
                    ['only' => ['edit']]);
}

要检查路线是否已设置,请运行:

php artisan route:list

应显示以下内容:

GET|HEAD | user/{user}/edit | user.edit | App\Http\Controllers\UserController@edit | auth

注意auth而不是guest

答案 4 :(得分:0)

更好的解决方案

使用中间件而不是之前

Route::group(['middleware' => 'auth'], function(){
   Route::resource('myitem', 'MyitemsController');
});

您可以查看是否可以:

php artisan route:list