You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 11出现Target class [is_admin]不存在错误求助

Laravel中添加is_admin中间件后出现「Target class [is_admin]不存在」错误

我正在开发一个用于学习Laravel的泰拳组合创建应用,添加is_admin权限选项后,出现了Target class [is_admin]不存在的错误。我已检查过以下内容:

  • 确认IsAdmin类定义正确
  • 拼写和大小写检查
  • Kernel.php中的中间件注册
  • auth()->user()->is_admin方法的使用
  • 路由检查

相关代码

IsAdmin.php 中间件代码

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class IsAdmin
{
    public function handle($request, Closure $next)
    {
        if (!Auth::check() || !Auth::user()->is_admin) {
            return redirect('home');
        }

        return $next($request);
    }
}

Kernel.php 代码

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;


class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'is_admin' => \App\Http\Middleware\IsAdmin::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];
    
}

web.php 路由代码

<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Auth\ResetPasswordController;
use App\Http\Controllers\Auth\VerifyEmailController;
use App\Http\Controllers\Auth\EmailVerificationNotificationController;
use App\Http\Controllers\Auth\EmailVerificationPromptController;
use App\Http\Controllers\ComboController;
use App\Http\Controllers\HomeController;

// General Routes
Route::get('/', function () {
    return view('welcome');
})->name('welcome');

// Authentication Routes
Route::get('login', [LoginController::class, 'showLoginForm'])->name('login');
Route::post('login', [LoginController::class, 'login']);
Route::post('logout', [LoginController::class, 'logout'])->name('logout');

Route::get('register', [RegisterController::class, 'showRegistrationForm'])->name('register');
Route::post('register', [RegisterController::class, 'register']);

Route::get('password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request');
Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email');
Route::get('password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->name('password.reset');
Route::post('password/reset', [ResetPasswordController::class, 'reset'])->name('password.update');

Route::get('email/verify', [EmailVerificationPromptController::class, '__invoke'])
    ->middleware('auth')->name('verification.notice');
Route::get('email/verify/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
    ->middleware(['auth', 'signed'])->name('verification.verify');
Route::post('email/resend', [EmailVerificationNotificationController::class, 'store'])
    ->middleware(['auth', 'throttle:6,1'])->name('verification.resend');

// Home Route
Route::get('/home', [HomeController::class, 'index'])->name('home');

// Combo Routes for authenticated users
Route::middleware(['auth'])->group(function () {
    Route::get('combos', [ComboController::class, 'index'])->name('combos.index');
    Route::get('combos/{combo}', [ComboController::class, 'show'])->name('combos.show');

    // Admin routes for managing combos
    Route::middleware(['is_admin'])->group(function () {
        Route::get('admin/combos/create', [ComboController::class, 'create'])->name('admin.combos.create');
        Route::post('admin/combos', [ComboController::class, 'store'])->name('admin.combos.store');
        Route::get('admin/combos', [ComboController::class, 'index'])->name('admin.combos.index');
        Route::get('admin/combos/{combo}/edit', [ComboController::class, 'edit'])->name('admin.combos.edit');
        Route::put('admin/combos/{combo}', [ComboController::class, 'update'])->name('admin.combos.update');
        Route::delete('admin/combos/{combo}', [ComboController::class, 'destroy'])->name('admin.combos.destroy');
    });
});

// Auth routes
Auth::routes();

ComboController.php 控制器代码

<?php

// app/Http/Controllers/ComboController.php

namespace App\Http\Controllers;

use App\Models\Combo;
use App\Models\Strike;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;


class ComboController extends Controller
{
    public function index()
    {
        $combos = Combo::where('is_public', true)->get();
        return view('combos.index', compact('combos'));
    }

    public function create()
    {
        if (auth()->user()->is_admin) {
            return view('admin.combos.create');
        }
        return view('combos.create');
    }

    public function store(Request $request)
    {
        try {
            $request->validate([
                'name' => 'required|string|max:255',
                'description' => 'required|string',
                'level' => 'required|in:Beginner,Intermediate,Advanced',
            ]);

            $comboData = $request->only(['name', 'description', 'level']);
            $comboData['user_id'] = auth()->id();

            if (auth()->user()->is_admin && $request->has('is_public')) {
                $comboData['is_public'] = $request->boolean('is_public');
            }

            $combo = Combo::create($comboData);

            foreach ($request->input('strikes', []) as $strikeName) {
                Strike::create([
                    'name' => $strikeName,
                    'combo_id' => $combo->id,
                ]);
            }

            return redirect()->route('combos.index');
        } catch (\Exception $e) {
            Log::error('Error creating combo: ' . $e->getMessage());
            return redirect()->back()->with('error', 'An error occurred while creating the combo.');
        }
    }

    public function show(Combo $combo)
    {
        return view('combos.show', compact('combo'));
    }

    public function edit(Combo $combo)
    {
        if (auth()->user()->is_admin) {
            return view('admin.combos.edit', compact('combo'));
        }
        return view('combos.edit', compact('combo'));
    }

    public function update(Request $request, Combo $combo)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'required|string',
            'level' => 'required|in:Beginner,Intermediate,Advanced',
        ]);

        $comboData = $request->only(['name', 'description', 'level']);

        if (auth()->user()->is_admin && $request->has('is_public')) {
            $comboData['is_public'] = $request->boolean('is_public');
        }

        $combo->update($comboData);

        $combo->strikes()->delete();
        foreach ($request->input('strikes', []) as $strikeName) {
            Strike::create([
                'name' => $strikeName,
                'combo_id' => $combo->id,
            ]);
        }

        return redirect()->route('combos.index');
    }

    public function destroy(Combo $combo)
    {
        $combo->delete();
        return redirect()->route('combos.index');
    }
}

内容的提问来源于stack exchange,提问作者Joël Montpetit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:47:31