php - Route::currentRouteAction 在 laravel 5.4 中不起作用

标签 php laravel laravel-5.4 laravel-routing laravel-middleware

我正在尝试创建一个中间件来检查当前路由的方法操作。

我的中间件如下:

<?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);

 }
}

但是当我转到路线时,它会抛出如下所示的错误

enter image description here

表示

Undefined offset: 1 in PermissionMiddleware.php (line 21)

我不知道如何解决该错误。

我需要一个指南来解决这个问题

谢谢

最佳答案

实际上,您的问题不是 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

关于php - Route::currentRouteAction 在 laravel 5.4 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44903428/

相关文章:

php - 上传 PDF 或 .doc 和安全

php - 根据 ID 表将单独的数组结果发送到打印机

php - mysql查询where条件

php - Laravel 表单验证,如果不为空则失败

VerifyCsrfToken.php 第 68 行中的 Laravel 5.4 TokenMismatchException

laravel - 如何更改 Laravel 中的响应?

php - 如何在 Laravel 5.4 中的 *belongsToMany* 表连接上创建作用域?

javascript - 如何使用 Javascript 和 Jquery 分别验证通过 PHP 循环创建的每个简单的 HTML 单选表单

php - Imagick PHP 中的奇怪行为

laravel - 如何使用 Redis 在 Laravel 5.8 中调度异步作业?