Route::currentRouteAction 在 laravel 5.4 中不起作用
Posted
技术标签:
【中文标题】Route::currentRouteAction 在 laravel 5.4 中不起作用【英文标题】:Route::currentRouteAction not working in laravel 5.4 【发布时间】:2017-12-07 18:38:11 【问题描述】:我正在尝试创建一个中间件来检查当前路由的方法操作。
我的中间件如下:
<?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 行)
我不知道如何解决这个错误。
我需要一个指南来解决这个问题
谢谢
【问题讨论】:
【参考方案1】:其实你的问题不在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
【讨论】:
感谢@The Alpha 的指导。但是,似乎 route() 在中间件中不可用,因为当我尝试您提供的示例时,它返回一个错误,表明我在 null 上调用 getActionMethod。在 null 上调用成员函数 getActionName() 您应该可以使用$request->route()->getActionMethod()
或$request->route()->getAction()
。以上是关于Route::currentRouteAction 在 laravel 5.4 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章