Laravel 11 - HasMiddleware 的 middleware() 方法与 Illuminate\Routing\Controller 的 middlware() 发生冲突

问题描述 投票:0回答:1

在扩展 Illuminate\Routing\Controller 的控制器中,我尝试使用新的 HasMiddleware 来实现一些中间件验证。

这是我尝试运行的代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller;
use Illuminate\Routing\Controllers\HasMiddleware;
use Illuminate\Routing\Controllers\Middleware;

class BaseController extends Controller implements HasMiddleware
{
    public static $readPermission = null;

    public static $customPermissionChecks = [];

    public static function middleware(): array
    {
        return array_merge([
            'auth:api',
            new Middleware('permission:' . self::$readPermission, ['only' => ['index', 'show']]),
            new Middleware('permission:write.' . self::$readPermission, ['only' => ['edit', 'store', 'update', 'destroy', 'restore']])
        ], self::$customPermissionChecks);
    }
}

但是 Illuminate\Routing\Controller 的 middlware() 与 HasMiddleware 的静态方法冲突,导致出现以下错误:

Cannot make non static method Illuminate\Routing\Controller::middleware() static in class App\Http\Controllers\BaseController

php laravel controller laravel-middleware laravel-11
1个回答
0
投票

您扩展了错误的控制器类

使用 App\Http 中的基本控制器

use App\Http\Controllers\Controller;

class BaseController extends Controller

而不是你用过的

use Illuminate\Routing\Controller;

class BaseController extends Controller
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.