Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

mehrdad70's avatar

Route not defined in laravel

hello i want to show detail categories , but i get this error

Route [admin.category.detail] not defined.
<a href="{{ route('admin.category.detail',$category->id) }}" class="btn btn-danger">category detail </a>
Route::prefix('admin')->middleware(['auth' , 'isAdmin'])->group(function(){    

    Route::resource('categories', CategoryController::class);
    Route::get('category/{id}/detail' , [CategoryController::class , 'detail'])->name('admin.category.detail');
    
});


0 likes
30 replies
tykus's avatar

Are your routes cached?

php artisan route:clear
mehrdad70's avatar

@tykus

  GET|HEAD        admin/categories ................................................... admin.categories.index › Admin\CategoryController@index  
  POST            admin/categories ................................................... admin.categories.store › Admin\CategoryController@store  
  GET|HEAD        admin/categories/create .......................................... admin.categories.create › Admin\CategoryController@create  
  PUT|PATCH       admin/categories/{category} ...................................... admin.categories.update › Admin\CategoryController@update  
  DELETE          admin/categories/{category} .................................... admin.categories.destroy › Admin\CategoryController@destroy  
  GET|HEAD        admin/categories/{category}/edit ..................................... admin.categories.edit › Admin\CategoryController@edit  
NoLAstNamE's avatar

Here's the updated code:

Route::prefix('admin.')->middleware(['auth' , 'isAdmin'])->group(function(){    
    Route::resource('categories', CategoryController::class);
    Route::get('category/{id}/detail' , [CategoryController::class , 'detail'])->name('category.detail');  
});

Notice this:

Route::prefix('admin.')

// removed admin. from here because you're already using admin. prefix
->name('category.detail');  

... and here's the full example from the docs

Route::name('admin.')->group(function () {
    Route::get('/users', function () {
        // Route assigned name "admin.users"...
    })->name('users');
});

EDIT

Sorry, my bad, I'm confused.

Route::name('admin.')->prefix('admin')->middleware(['auth' , 'isAdmin'])->group(function(){    
    Route::resource('categories', CategoryController::class);
    Route::get('category/{id}/detail' , [CategoryController::class , 'detail'])->name('category.detail');  
});
tykus's avatar

@mehrdad70 the admin. prefix on the resource routes is coming from where; you have a prefix Router method; but that is for the URI only. You are not showing me everything.

mehrdad70's avatar

@benjamin1509

The main problem is that it does not bypass the blade section to reach the web.php file, the error is from the same section

tykus's avatar

@mehrdad70 the full routes file; and the app/Http/Kernel.php file.

EDIT the RouteServiceProvider not Kernel 🤦‍♂️

mehrdad70's avatar

@tykus

    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array<int, class-string|string>
     */
    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<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $routeMiddleware = [
        'admin' => \App\Http\Middleware\AdminAccessToPanel::class,
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::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' => \App\Http\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];
Route::prefix('admin.')->middleware(['auth' , 'isAdmin'])->group(function(){
    Route::get('/' , [HomeController::class , 'index'])->name('admin');

    Route::resource('users', UserController::class);
    Route::get('users/{id}/change-permission' , [UserController::class , 'changePermission'])->name('user.changePermission');
    Route::resource('articles', ArticleController::class);
    Route::get('article/{articleId}/image/{imageId}/remove' , [ArticleController::class , 'removeImage'])->name('article.removeImage');

    Route::get('article/{id}/accept' , [ArticleController::class , 'accept'])->name('article.accept');
    Route::get('article/{id}/reject' , [ArticleController::class , 'reject'])->name('article.reject');

    Route::get('setting' , [SettingController::class , 'index'])->name('setting.index');
    Route::get('setting/create' , [SettingController::class , 'create'])->name('setting.create');
    Route::post('setting/store' , [SettingController::class , 'storeSetting'])->name('setting.store');

    Route::resource('comments', CommentController::class)->except(['create' , 'store']);
    Route::post('comment/reply' , [CommentController::class , 'replyComment'])->name('comment.replyStore');
    Route::get('comment/{id}/accept' , [CommentController::class , 'accept'])->name('comment.accept');
    Route::get('comment/{id}/reject' , [CommentController::class , 'reject'])->name('comment.reject');
    
    Route::resource('categories', CategoryController::class);
    Route::get('legal/{category}/detail' , [CategoryController::class , 'detail'])->name('legal.detail');
    Route::get('category/{categoryId}/image/{imageId}/remove' , [CategoryController::class , 'removeImage'])->name('category.removeImage');
    
});
RahulKRaj7's avatar

try like this

Route::group(['prefix' => 'admin', 'as' => 'admin.', 'middleware' => ['auth', 'isAdmin']], function () {
Route::resource('categories', CategoryController::class);
Route::get('/category/{id}/detail' , [CategoryController::class , 'detail'])->name('category.detail');  
});
NoLAstNamE's avatar

@mehrdad70 That's impossible, did you try @tykus 's answer, php artisan route:clear?

Also, check if you are editing the correct routes/web.php file or editing the right blade file.

Lara_Love's avatar

there are clear for project every command is for problem

Clear Route Cache:
php artisan route:clear

php artisan config:clear

Clear View Cache:
php artisan cache:clear

Lara_Love's avatar

@mehrdad70 use

php artisan route:clear

and then see web.php and

php artisan route:list 

is your route name ?

mehrdad70's avatar

@LoverCode

  GET|HEAD        admin/categories ................................................... admin.categories.index › Admin\CategoryController@index  
  POST            admin/categories ................................................... admin.categories.store › Admin\CategoryController@store  
  GET|HEAD        admin/categories/create .......................................... admin.categories.create › Admin\CategoryController@create  
  PUT|PATCH       admin/categories/{category} ...................................... admin.categories.update › Admin\CategoryController@update  
  DELETE          admin/categories/{category} .................................... admin.categories.destroy › Admin\CategoryController@destroy  
  GET|HEAD        admin/categories/{category}/edit ..................................... admin.categories.edit › Admin\CategoryController@edit  
Shivamyadav's avatar

@mehrdad70 replace this line from your code

 Route::get('category/{id}/detail' , [CategoryController::class , 'detail'])->name('admin.category.detail');

and add this in place of it

Route::resource('category', PhotoController::class)->only([
   'detail'
]);
Shivamyadav's avatar

I have finded your error.. Mr @mehrdad70 your are using the resource method and see in your this list that url is not generated by the laravel cmd php artisan route:list. take a look

  GET|HEAD        admin/categories ................................................... admin.categories.index › Admin\CategoryController@index  
  POST            admin/categories ................................................... admin.categories.store › Admin\CategoryController@store  
  GET|HEAD        admin/categories/create .......................................... admin.categories.create › Admin\CategoryController@create  
  PUT|PATCH       admin/categories/{category} ...................................... admin.categories.update › Admin\CategoryController@update  
  DELETE          admin/categories/{category} .................................... admin.categories.destroy › Admin\CategoryController@destroy  
  GET|HEAD        admin/categories/{category}/edit ..................................... admin.categories.edit › Admin\CategoryController@edit  

when you use resource method then , resouce is only able to call the defined 7 methods only ..not other methods you created on the controller , like you created a method details

 Route::resource('categories', CategoryController::class);
    Route::get('category/{id}/detail' , [CategoryController::class , 'detail'])->name('admin.category.detail');
mehrdad70's avatar

@Shivamyadav

    Route::get('categories', [CategoryController::class , 'index'])->name('categories.index');
    Route::get('categories/craete', [CategoryController::class , 'create'])->name('categories.create');
    Route::post('categories/store', [CategoryController::class , 'store'])->name('categories.store');
    Route::get('categories/{id}/show', [CategoryController::class , 'show'])->name('categories.show');
    Route::get('categories/{id}/edit', [CategoryController::class , 'edit'])->name('categories.edit');
    Route::patch('categories/{id}/update', [CategoryController::class , 'update'])->name('categories.update');
    Route::delete('categories/{id}/delete', [CategoryController::class , 'destroy'])->name('categories.destroy');
    Route::get('categories/{id}/detail', [CategoryController::class , 'detail'])->name('categories.detail');
    Route::get('category/{categoryId}/image/{imageId}/remove' , [CategoryController::class , 'removeImage'])->name('category.removeImage');

but not work

Lara_Love's avatar

Route::get('categories/{id}/detail', change to Route::get('categories/detail/{id}', and other use like this

mehrdad70's avatar

@LoverCode There is no problem with the web file at all It cannot pass through the blade file

 @foreach ($categories as $category )
                                <tr>
                                    <th scope="row">{{ $category->id }}</th>
                                    <td>{{ $category->name }}</td>
                                    <td>{{ $category->getParentName()  }}</td>
                                    <td>

                                        <form action="{{ route('admin.categories.destroy',$category->id) }}" method="POST" id="destroy-menu-{{ $category->id }}">
                                            @csrf
                                            @method('DELETE')
                                            <button type="submit" class="btn-custom">
                                                <i class="mdi mdi-trash-can-outline fa-custom"></i>
                                            </button>
                                            <a href="{{ route('admin.categories.edit',$category->id) }}">
                                                <button type="button" class="btn-custom"><i class="mdi mdi-square-edit-outline fa-custom"></i></button>
                                            </a>
                                            <a href="{{ route('admin.categories.deatil') }}">
                                                <button type="button" class="btn-custom"><i class="mdi mdi-square-edit-outline fa-custom"></i></button>
                                            </a>
                                        </form>
                                        
                                    </td>
                                   

                                </tr>

                                @endforeach
Shivamyadav's avatar

@mehrdad70 copy this code and replace with your code then run ```php artisan route:list`` and show the output here

Route::prefix('admin')->middleware(['auth' , 'isAdmin'])->group(function(){    
	 Route::get('category/{id}/detail' , [CategoryController::class , 'detail']);
    Route::resource('categories', CategoryController::class);
1 like

Please or to participate in this conversation.