Authentication ';auth';具有Route::resource的中间件

Authentication ';auth';具有Route::resource的中间件,authentication,laravel,laravel-4,middleware,Authentication,Laravel,Laravel 4,Middleware,如何将中间件与资源一起使用 Route::resource('myitem', ['middleware' => 'auth', 'uses' => 'App\\Controllers\\MyitemsController']); 刚刚跟进,但不幸无法解决 获取错误: ErrorException (E_UNKNOWN) Array to string conversion Open: /vendor/laravel/framework/src/Illuminate/Routin

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

Route::resource('myitem', ['middleware' => 'auth', 'uses' => 'App\\Controllers\\MyitemsController']);
刚刚跟进,但不幸无法解决

获取错误:

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);
}

中间件是Laravel 5的一个新特性。在Laravel 4中,过滤类似的内容。因此,您不应该使用键
中间件
,而应该在
之前或之后使用
。另外,这也是错误的来源,
Route::resource
的第二个参数应该是控制器名称,作为字符串,第三个参数是选项数组:

Route::resource('myitem', 'App\\Controllers\\MyitemsController', ['before' => 'auth']);
编辑
显然,以前的过滤器只在您将一个组环绕在其周围时才对资源路由起作用。有关示例,请参见OPs答案

对资源使用筛选器不起作用,这就是为什么必须使用
Route::group

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

我刚刚遇到了这个问题,发现最简单的方法是直接将中间件添加到控制器中

我在这里找到了答案:


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

使用
中间件
而不是之前的

Route::group(array('middleware' => 'auth'), function()
{
    Route::resource('user', 'UserController',
                    ['only' => ['edit']]);
}
要检查路线是否已设置,请运行:

php工匠路线:列表

其中应显示以下内容:

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

注意
auth
而不是
guest

更好的解决方案

使用中间件,而不是以前

Route::group(['middleware' => 'auth'], function(){
   Route::resource('myitem', 'MyitemsController');
});
您可以检查以下各项是否正常:


php artisan route:list

您使用的是Laravel 4还是5?因为标签上写着4,但中间件是在Laravel5中引入的…我使用的是Laravel4。你确定这是laravel5中的一个功能吗?这是一个非常有用的问题。我刚开始学习Laravel5,文档并不总是清晰的。我明白了。从那时起,必须使用laravel 4进行明确搜索,因为laravel 5现在是公开的。对不起,我必须使用路线::group@SazzadTusharKhan我同意。使用Route:group是我能找到的唯一解决方案。我认为这更接近最佳答案。我无法获得Route:resource作为第二个参数,后跟一个数组,与控制器一起工作。将我所有受保护的路由放在一个组中是有效的。
Route::group(['middleware' => 'auth'], function(){
   Route::resource('myitem', 'MyitemsController');
});