'auth' 中间件 Route::resource
'auth' Middleware with Route::resource
如何将中间件与资源一起使用?
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、filters 里有类似的东西。因此,您应该使用 before
或 after
而不是使用密钥 middleware
。另外,这就是错误的来源,Route::resource
的第二个参数应该是字符串形式的控制器名称,第三个参数是一个选项数组:
Route::resource('myitem', 'App\Controllers\MyitemsController', ['before' => 'auth']);
编辑
显然,当您围绕它包装一个组时,过滤器仅适用于资源路由。有关示例,请参阅 OP 答案...
对资源使用过滤器不起作用,为什么必须使用 Route::group
Route::group(array('before' => 'auth'), function()
{
Route::resource('myitem', 'App\Controllers\MyitemsController');
});
我刚遇到这个问题,发现最简单的方法是将中间件直接添加到控制器。
我在这里找到了答案:
http://laravel.com/docs/master/controllers
class MyitemsController extends Controller {
/**
* Instantiate a new MyitemsController instance.
*/
public function __construct()
{
$this->middleware('auth');
}
}
如何在 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
更好的解决方案
使用中间件而不是之前
Route::group(['middleware' => 'auth'], function(){
Route::resource('myitem', 'MyitemsController');
});
您可以通过以下方式检查是否正常:
php artisan route:list
如何将中间件与资源一起使用?
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、filters 里有类似的东西。因此,您应该使用 before
或 after
而不是使用密钥 middleware
。另外,这就是错误的来源,Route::resource
的第二个参数应该是字符串形式的控制器名称,第三个参数是一个选项数组:
Route::resource('myitem', 'App\Controllers\MyitemsController', ['before' => 'auth']);
编辑
显然,当您围绕它包装一个组时,过滤器仅适用于资源路由。有关示例,请参阅 OP 答案...
对资源使用过滤器不起作用,为什么必须使用 Route::group
Route::group(array('before' => 'auth'), function()
{
Route::resource('myitem', 'App\Controllers\MyitemsController');
});
我刚遇到这个问题,发现最简单的方法是将中间件直接添加到控制器。
我在这里找到了答案: http://laravel.com/docs/master/controllers
class MyitemsController extends Controller {
/**
* Instantiate a new MyitemsController instance.
*/
public function __construct()
{
$this->middleware('auth');
}
}
如何在 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
更好的解决方案
使用中间件而不是之前
Route::group(['middleware' => 'auth'], function(){
Route::resource('myitem', 'MyitemsController');
});
您可以通过以下方式检查是否正常:
php artisan route:list