在扩展 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
您扩展了错误的控制器类
使用 App\Http 中的基本控制器
use App\Http\Controllers\Controller;
class BaseController extends Controller
而不是你用过的
use Illuminate\Routing\Controller;
class BaseController extends Controller