【发布时间】:2017-09-23 03:27:51
【问题描述】:
我试图将同一控制器的某些方法与不同的中间件一起使用,例如让管理员和用户使用方法索引并在同一控制器中创建。所以我做了一个管理员守卫和用户守卫。
这是我的管理中间件
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class AdminMidleware
{
public function handle($request, Closure $next)
{
if (Auth::guard('admin')->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/');
}
}
return $next($request);
}
}
我的用户中间件
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class UserMiddleware
{
public function handle($request, Closure $next)
{
if (Auth::guard('user')->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('/');
}
}
return $next($request);
}
}
它们都在 $routeMiddleware 的 kernel.php 中
'admin' => \App\Http\Middleware\AdminMidleware::class,
'user' => \App\Http\Middleware\UserMiddleware::class,
如果我使用它,我可以让只有管理员才能访问这些方法,并且它可以工作,你必须以管理员身份登录才能使用这些方法。
public function __construct(){
$this->middleware('admin', ['only' => [
'index',
'create',
]]);
}
这是假设让用户和管理员都能够在同一个控制器中使用索引和创建方法,并作为第一个参数发送一个包含管理员和用户中间件的数组,
public function __construct(){
$this->middleware(['admin', 'user'], ['only' => [
'index',
'create',
]]);
}
但是,它不起作用,它实际上使没有人能够使用这些方法,你能帮我把这个工作做好吗?我做错了什么?
【问题讨论】:
标签: php laravel controller middleware guard