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-&gt;route()-&gt;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-&gt;route()-&gt;getActionMethod()$request-&gt;route()-&gt;getAction()

以上是关于Route::currentRouteAction 在 laravel 5.4 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章