Laravel 11 — метод промежуточного ПО HasMiddleware() конфликтует с методом Middlware() Illuminate\Routing\Controller

В моем контроллере, который расширяет 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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы расширяете неправильный класс контроллера

используйте базовый контроллер в App\Http

use App\Http\Controllers\Controller;

class BaseController extends Controller

Вместо того, который вы использовали

use Illuminate\Routing\Controller;

class BaseController extends Controller

Тот, что в Illuminate\Routing, содержит метод middleware(), который не является статическим, поэтому вы не можете изменить его тип

/**
 * 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);
}

Другие вопросы по теме