In Laravel 11 there are no Kernel.php files left. You are not using the latest Laravel version, from Kernel.php file I can see, that this is from Laravel 9. If you are indeed using Laravel 11, try in the Kernel.php file to change $routeMiddleware to $middlewareAliases and the problem may be solved.
Jun 29, 2024
3
Level 1
I'm getting a Target class [is_admin] does not exist error with Laravel 11
I'm making an app to learn Laravel, which will enable me to create Muay Thai combos.
I've added an is_admin option to my combo creations and since then I've been getting the error Target class [is_admin] does not exist.
Items I've checked several times:
Check that the IsAdmin class is correctly defined in the
Spelling and case checking
Registration of middleware in Kernel.php
Use of auth()->user()->is_admin method
Checking routes
I also did php artisan config:cache php artisan cache:clear php artisan route:clear php artisan view:clear
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');
}
If anyone could help me it would be greatly appreciated.
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');
}
}
Please or to participate in this conversation.