Search code examples
laravellaravel-9

Laravel edit route for basic CRUD application giving 404


I'm trying to set up a basic Laravel 9 CRUD application, and I cannot get the edit route working for the User Controller.

routes/web.php

Route::get('/dashboard', function () { return view('dashboard'); })
    ->middleware(['auth'])->name('dashboard');

use App\Http\Controllers\UserController;

Route::controller(UserController::class)->group(function(){
    Route::get('user','index')->middleware('auth')->name('cases');
    Route::get('user/create','create')->middleware('auth');
    Route::post('user/create','store')->middleware('auth');
    Route::get('user/{$id}/edit','edit')->middleware('auth');
    Route::post('user/{$id}/edit','update')->middleware('auth');
    Route::get('user/{$id}/delete','destroy')->middleware('auth');
    Route::get('user/{id}','show')->middleware('auth');
});

require __DIR__.'/auth.php';

UserController.php

class UserController extends Controller
{
    function edit(int $id)
    {
        echo 123;
    }

I'm getting a 404 NOT FOUND page

enter image description here

Also, why don't I see the stack trace for this error?

Also, in some examples, I've seen people using the model class name as the parameter type in the controller method declaration, such as:

function edit(User $id)
{
    echo 123;
}

However, I've also seen other examples using int instead. So which is the correct one?


Solution

  • First, inside your .env filte you should put

    APP_ENV=local
    APP_DEBUG=true
    

    and change your web.php to:

    <?php
    
    use Illuminate\Support\Facades\Route;
    
    Route::get('/dashboard', function () { return view('dashboard'); })->middleware(['auth'])->name('dashboard');
    
    use App\Http\Controllers\UserController;
    
    Route::controller(UserController::class)->group(function(){
        Route::get('user','index')->middleware('auth')->name('cases');
        Route::get('user/create','create')->middleware('auth');
        Route::post('user/create','store')->middleware('auth');
        Route::get('user/{id}/edit','edit')->middleware('auth');
        Route::post('user/{id}/edit','update')->middleware('auth');
        Route::get('user/{id}/delete','destroy')->middleware('auth');
        Route::get('user/{id}','show')->middleware('auth');
    });
    
    require __DIR__.'/auth.php';
    

    Then, try to run

    php artisan route:list
    

    and check if your routes are correct.

    And try to remove middlewares inside user files, maybe you do not have login page and it redirects you there.

    Be sure you are in the correct url like localhost/user/1/edit