-1

I'm having this error that I can't seem to resolve. I'm making a Laravel application in PHP.

The routes in the web.php file are correct. There are no errors in the controller, nor in the kernel.php file. I really can't figure out why it's not working.

Thanks to anyone who can help me. I've seen similar questions, but they haven't helped.

Internal Server Error

Illuminate\Contracts\Container\BindingResolutionException
Target class [admin] does not exist.
GET 127.0.0.1:8888
PHP 8.2.11 — Laravel 12.20.0

Expand vendor frames

Illuminate\Container\Container:1019 build
Illuminate\Container\Container:890 resolve
Illuminate\Foundation\Application:1077 resolve
Illuminate\Container\Container:821 make
Illuminate\Foundation\Application:1057 make
Illuminate\Pipeline\Pipeline:197 Illuminate\Pipeline{closure}

Barryvdh\Debugbar\Middleware\InjectDebugbar:66 handle
Illuminate\Pipeline\Pipeline:208 Illuminate\Pipeline{closure}
Illuminate\Routing\Middleware\SubstituteBindings:50 handle
Illuminate\Pipeline\Pipeline:208 Illuminate\Pipeline{closure}
Illuminate\Auth\Middleware\Authenticate :63 handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Foundation\Http\Middleware\VerifyCsrfToken
:87
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\View\Middleware\ShareErrorsFromSession
:48
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Session\Middleware\StartSession
:120
handleStatefulRequest

Illuminate\Session\Middleware\StartSession
:63
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse
:36
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Cookie\Middleware\EncryptCookies
:74
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Pipeline\Pipeline
:126
then

Illuminate\Routing\Router
:807
runRouteWithinStack

Illuminate\Routing\Router
:786
runRoute

Illuminate\Routing\Router
:750
dispatchToRoute

Illuminate\Routing\Router
:739
dispatch

Illuminate\Foundation\Http\Kernel
:200
Illuminate\Foundation\Http\{closure}

Illuminate\Pipeline\Pipeline
:169
Illuminate\Pipeline\{closure}

Barryvdh\Debugbar\Middleware\InjectDebugbar
:66
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Foundation\Http\Middleware\TransformsRequest
:21
handle

Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull
:31
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Foundation\Http\Middleware\TransformsRequest
:21
handle

Illuminate\Foundation\Http\Middleware\TrimStrings
:51
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Http\Middleware\ValidatePostSize
:27
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance
:109
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Http\Middleware\HandleCors
:48
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Http\Middleware\TrustProxies
:58
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Foundation\Http\Middleware\InvokeDeferredCallbacks
:22
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Http\Middleware\ValidatePathEncoding
:26
handle

Illuminate\Pipeline\Pipeline
:208
Illuminate\Pipeline\{closure}

Illuminate\Pipeline\Pipeline
:126
then

Illuminate\Foundation\Http\Kernel
:175
sendRequestThroughRouter

Illuminate\Foundation\Http\Kernel
:144
handle

Illuminate\Foundation\Application
:1219
handleRequest

C:\Users\PC\Desktop\gestione_biblioteca\public\index.php
:20
require_once

C:\Users\PC\Desktop\gestione_biblioteca\vendor\laravel\framework\src\Illuminate\Foundation\resources\server.php
:23
C:\Users\PC\Desktop\gestione_biblioteca\vendor\laravel\framework\src\Illuminate\Container\Container.php :1019
        }
 
        try {
            $reflector = new ReflectionClass($concrete);
        } catch (ReflectionException $e) {
            throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
        }
 
        // If the type is not instantiable, the developer is attempting to resolve
        // an abstract type such as an Interface or Abstract Class and there is
        // no binding registered for the abstractions so we need to bail out.
        if (! $reflector->isInstantiable()) {
            return $this->notInstantiable($concrete);
        }
 
        $this->buildStack[] = $concrete;
 
Request
GET /admin/copies

File web.php:

use App\Http\Controllers\Admin\BookController;
use App\Http\Controllers\Admin\BookCopyController;
use App\Http\Controllers\Admin\CategoryController;
use App\Http\Controllers\Auth\RegisteredUserController;
use App\Http\Controllers\LibroController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\Admin\ReservationUserController;
use Illuminate\Support\Facades\Route;

// Rotte pubbliche
Route::get('/', fn() => view('home'));

Route::get('/catalogo', [LibroController::class, 'index'])->name('books.catalog.index');
Route::get('/catalogo/{book}', [LibroController::class, 'show'])->name('books.catalog.show');

// Rotte autenticazione
require __DIR__.'/auth.php';

// Rotte utenti autenticati
Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', fn() => view('dashboard'))->name('dashboard');
    
    // Profilo
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');

    // Prenotazioni utente
    Route::get('/prenotazioni', [ReservationUserController::class, 'index'])->name('prenotazioni.index');
    Route::post('/prenota/{book}', [ReservationUserController::class, 'reserve'])->name('reservations.reserve');
    Route::get('/mie-prenotazioni', [ReservationUserController::class, 'index'])->name('my.reservations');
});

// Rotte admin protette da auth e admin middleware
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
    Route::get('/dashboard', fn() => view('admin.dashboard'))->name('dashboard');

    // Risorse admin
    Route::resource('books', BookController::class);
    Route::resource('copies', BookCopyController::class);
    Route::resource('reservations', ReservationUserController::class)->names([
        'index'   => 'reservations.index',
        'create'  => 'reservations.create',
        'store'   => 'reservations.store',
        'show'    => 'reservations.show',
        'edit'    => 'reservations.edit',
        'update'  => 'reservations.update',
        'destroy' => 'reservations.destroy',
    ]);
    Route::get('/users', [RegisteredUserController::class, 'index'])->name('users.index');
});

// Rotte categoria senza restrizioni particolari (puoi aggiungere middleware se vuoi)
Route::resource('categories', CategoryController::class)->only(['index', 'create', 'store', 'destroy']);


nel middleware ho: use App\Http\Controllers\Admin\BookController;
use App\Http\Controllers\Admin\BookCopyController;
use App\Http\Controllers\Admin\CategoryController;
use App\Http\Controllers\Auth\RegisteredUserController;
use App\Http\Controllers\LibroController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\Admin\ReservationUserController;
use Illuminate\Support\Facades\Route;

// Rotte pubbliche
Route::get('/', fn() => view('home'));

Route::get('/catalogo', [LibroController::class, 'index'])->name('books.catalog.index');
Route::get('/catalogo/{book}', [LibroController::class, 'show'])->name('books.catalog.show');

// Rotte autenticazione
require __DIR__.'/auth.php';

// Rotte utenti autenticati
Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', fn() => view('dashboard'))->name('dashboard');
    
    // Profilo
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');

    // Prenotazioni utente
    Route::get('/prenotazioni', [ReservationUserController::class, 'index'])->name('prenotazioni.index');
    Route::post('/prenota/{book}', [ReservationUserController::class, 'reserve'])->name('reservations.reserve');
    Route::get('/mie-prenotazioni', [ReservationUserController::class, 'index'])->name('my.reservations');
});

// Rotte admin protette da auth e admin middleware
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
    Route::get('/dashboard', fn() => view('admin.dashboard'))->name('dashboard');

    // Risorse admin
    Route::resource('books', BookController::class);
    Route::resource('copies', BookCopyController::class);
    Route::resource('reservations', ReservationUserController::class)->names([
        'index'   => 'reservations.index',
        'create'  => 'reservations.create',
        'store'   => 'reservations.store',
        'show'    => 'reservations.show',
        'edit'    => 'reservations.edit',
        'update'  => 'reservations.update',
        'destroy' => 'reservations.destroy',
    ]);
    Route::get('/users', [RegisteredUserController::class, 'index'])->name('users.index');
});

// Rotte categoria senza restrizioni particolari (puoi aggiungere middleware se vuoi)
Route::resource('categories', CategoryController::class)->only(['index', 'create', 'store', 'destroy']);
5
  • 1
    I think your issue is with this code: Route::middleware(['auth', 'admin']); if the admin Middleware doesn't exist, I believe that would trigger this error. I've seen this question on Stackoverflow before, so see if you find any of those other questions and see if they have a solution available. Commented Jul 29 at 17:33
  • yes there is middleware, I called it Admin Commented Jul 29 at 18:52
  • And you assigned this Admin middleware as admin? I haven't worked much with Laravel 12, so the syntax is different than what I'm used to, but laravel.com/docs/12.x/middleware#middleware-aliases should give you the idea Commented Jul 29 at 19:12
  • 2
    I voted to re-open as it's now in English, but removed the irrelevant info you posted (regarding that, please read Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? if you don't know why it's not relevant). Thanks Commented Jul 29 at 21:41
  • May you also provide the Admin middleware? Commented Jul 31 at 13:19

2 Answers 2

0

Controller dependency or route group middleware using a string 'admin' that it cannot map to a valid class or middleware

  1. Create the AdminMiddleware
php artisan make:middleware AdminMiddleware

Then open app/Http/Middleware/AdminMiddleware.php and define your logic:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class AdminMiddleware
{
    public function handle(Request $request, Closure $next): Response
    {
        if (!auth()->check() || !auth()->user()->is_admin) {
            abort(403, 'Unauthorized');
        }

        return $next($request);
    }
}

Open app/Http/Kernel.php, and add your alias in the middlewareAliases() method:

protected function middlewareAliases(): array
{
    return [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'admin' => \App\Http\Middleware\AdminMiddleware::class,
        // add other middleware here
    ];
}


// app/Http/Kernel.php
protected function middlewareAliases(): array
{
    return [
        'admin' => \App\Http\Middleware\AdminMiddleware::class,
    ];
}
Sign up to request clarification or add additional context in comments.

Comments

0

Since you are on laravel 12 create the AdminMiddleware using this command

php artisan make:middleware AdminMiddleware

in the AdminMiddleware file, enter this code

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class AdminMiddleware
{
    public function handle(Request $request, Closure $next): Response
    {
        if (!auth()->check() || !auth()->user()->is_admin) {
            abort(403, 'Unauthorized');
        }

        return $next($request);
    }
}

And register it in your bootstrap/app.php file like this

<?php

use Illuminate\Foundation\Application;
use App\Http\Middleware\AdminMiddleware;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Console\Scheduling\Schedule;
use Symfony\Component\HttpKernel\Exception\HttpException;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        channels: __DIR__.'/../routes/channels.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'admin' => AdminMiddleware::class,
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
    });

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.