我正在尝试创建一个中间件来检查当前路由的方法操作。
我的中间件如下:
<?php
namespace App\Http\Middleware;
use Closure;
use Route;
class PermissionMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$currentAction = Route::currentRouteAction();
list($nothing,$route_action) = explode('App\Http\Controllers\\', $currentAction);
$user_methods=session('userdata')['route_actions'];
if((empty($user_methods))||!$user_methods->contains($route_action))
{
return redirect('denied');
}
return $next($request);
}
}
但是当我去路线时,它会抛出一个错误,如下所示
指示
未定义的偏移量:1 在PermissionMiddleware.php(第21行)
我无法弄清楚如何解决错误。
我需要一本指南来解决这个问题
谢谢
答案 0 :(得分:0)
实际上,您的问题不是Route::currentRouteAction()
,而是在以下行之后:
list($nothing, $route_action) = explode('App\Http\Controllers\\', $currentAction);
发生的地方并不是很明显,但你应该检查以下一行:
$user_methods = session('userdata')['route_actions'];
确保session('userdata')
返回预期结果,例如:
if ($userData = session('userdata')) {
if (isset($userData['route_actions'])) {
$user_methods = $userData['route_actions'];
// ...
}
}
此外,您可以使用$request->route()->getActionName()
获取相同的结果,而不是使用Route::currentRouteAction()
。还有其他有用的方法可用于获取有关路线操作的信息,例如:
$request->route()->getActionMethod(); // get the method name
$request->route()->getAction(); // get an array containing many information