我正在开始我的第一个Laravel项目(实际上是第一个MVC / OOPHP项目),并且可以在路线方面使用一些帮助。
我按照https://medium.com/employbl/easily-build-administrator-login-into-a-laravel-5-app-8a942e4fef37上的指南添加了检查,以确保用户在加载页面时是否是管理员。它适用于普通视图路线,例如
Route::get('/admin/something', 'AdminController@admin_something')
->middleware('is_admin')
->name('admin');
但是我现在有一条资源路由,当我在路由中添加两行->时出现错误。因此,此方法无需身份验证即可:
Route::resource('thingies', 'ThingyController');
但是,这个:
Route::resource('thingies', 'ThingyController')
->middleware('is_admin')
->name('admin');
我收到错误Symfony \组件\调试\异常\ FatalThrowableError(E_RECOVERABLE_ERROR) 函数Illuminate \ Routing \ PendingResourceRegistration :: name()的参数太少,第24行的/var/www/routes/web.php中传递了1个参数,而恰好传递了2个参数
要将此身份验证添加到资源路由,我需要做些什么?
教程中的is_admin()函数:
const ADMIN_TYPE = 'admin';
const DEFAULT_TYPE = 'default';
public function isAdmin() {
return $this->type === self::ADMIN_TYPE;
}
和中间件:
namespace App\Http\Middleware;
use Closure;
class IsAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(auth()->user()->isAdmin()) {
return $next($request);
}
return redirect('home');
}
}
答案 0 :(得分:1)
您不能为resource route
指定一个“名称”。但是您可以分别为resource controller
中的每个方法命名。
为此,name()
函数需要2个参数。
,
Route::resource('thingies', 'ThingyController')
->middleware('is_admin')
->name('create', 'admin.create');
答案 1 :(得分:1)
您不能在资源路由的末尾用->name('admin');
命名路由“ admin” ,因为它在一条语句中涉及所有CRUD路由,并且Laravel内置系统已经命名他们。
您的方法不错,只需像这样删除最后一行,就可以了:
Route::resource('thingies', 'ThingyController')
->middleware('is_admin');