В моем контроллере, который расширяет 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);
}
}
Однако метод Middlware() Illuminate\Routing\Controller конфликтует со статическим методом 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
/**
* Register middleware on the controller.
*
* @param \Closure|array|string $middleware
* @param array $options
* @return \Illuminate\Routing\ControllerMiddlewareOptions
*/
public function middleware($middleware, array $options = [])
{
foreach ((array) $middleware as $m) {
$this->middleware[] = [
'middleware' => $m,
'options' => &$options,
];
}
return new ControllerMiddlewareOptions($options);
}