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
相关产品推荐
相关产品推荐

