1
resposta

Call to undefined method App\Http\Controllers\SeriesController::middleware()

Pessoal, estou tentando usar o middleware dentro do construtor da SeriesController, mas ele não reconhece o método, mesmo que eu use o extends controller.

Objeto:

<?php

namespace App\Http\Controllers;

use App\Http\Middleware\Autenticador;
use App\Http\Requests\SeriesFormRequest;
use Illuminate\Http\Request;
use App\Models\Series;
use App\Repositories\EloquentSeriesRepository;
use App\Repositories\SeriesRepository;


class SeriesController extends Controller
{

    public function __construct(private SeriesRepository $repository)
    {
        $this->middleware(Autenticador::class)->except('index');
    }

    public function index(Request $request)
    {   
        $series = Series::all();
        $mensagemSucesso = session('mensagem.sucesso');

        return view('series.index')-> with('series',$series)->with('mensagemSucesso',$mensagemSucesso);
    }

    public function create()
    {
        return view('series.create');
    }

    public function store(SeriesFormRequest $request, EloquentSeriesRepository $repository)
    {   

        $serie = $this->repository->add($request);

        return \to_route('series.store')->with('mensagem.sucesso', "Série '{$serie->nome}' adicionada com sucesso ");    
    }

    public function destroy(Series $series)
    {
        $series->delete();

        return to_route('series.index')->with('mensagem.sucesso',"Série '{$series->nome}' removida com sucesso");
    }

    public function edit(Series $series)
    {
        return view("series.edit")->with("serie",$series);
    }

    public function update(Series $series, SeriesFormRequest $request)
    {
        $series->fill($request->all());
        $series->save();

        return \to_route("series.index")->with("mensagem.sucesso","Série {$series->nome} atualizada com sucesso");
    }
}

O erro "Call to undefined method App\Http\Controllers\SeriesController::middleware()"

1 resposta

Olá, Maurílio, tudo bem?

O erro que você está encontrando geralmente ocorre quando o Laravel não consegue encontrar o método middleware() na classe SeriesController. Isso pode acontecer por algumas razões, mas uma possibilidade é que a classe Controller, da qual a SeriesController está estendendo, não tenha esse método.

No seu código, você está estendendo a classe Controller, que deve conter o método middleware(). Se o método middleware() não estiver disponível, pode ser que a classe Controller não esteja sendo importada corretamente ou que você não esteja usando a versão correta do Laravel.

Uma coisa que você pode tentar é verificar se o arquivo Controller.php está no diretório correto (deve estar em app/Http/Controllers) e se ele contém o método middleware().

No entanto, olhando para o seu código, parece que você está usando a sintaxe de propriedades promovidas do PHP 8 no construtor da classe. Isso pode estar causando o problema, pois o método middleware() é chamado dentro do construtor.

Tente alterar o construtor para o seguinte:

public function __construct(SeriesRepository $repository)
{
    $this->repository = $repository;
    $this->middleware(Autenticador::class)->except('index');
}

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!