Laravel Resource Controller producing 404 despite being properly routed

Viewed 93

I have created a resource controller called BirdsController. The controllers index and show methods route to pages correctly. But the create method is producing 404 error despite the route and controller being properly set up. What produces this error?

web.php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\BirdsController;


Route::get('wildlife/birds', [BirdsController::class, 'index'])->name('birds');
Route::get('wildlife/birds/{bird:name}', [BirdsController::class, 'show'])->name('birds.show');
Route::get('wildlife/birds/create', [BirdsController::class, 'create'])->name('birds.create');

BirdsController

namespace App\Http\Controllers;

use App\Models\Birds;
use App\Models\User;
use Illuminate\Http\Request;

class BirdsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $birds = Birds::all();
        return view('wildlife.birds.index',compact('birds'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('wildlife.birds.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Birds  $birds
     * @return \Illuminate\Http\Response
     */
    public function show(Birds $bird)
    {
        return view('wildlife.birds.show', compact('bird'));
    }
2 Answers

Why don't use the Controller as resource in web.php route file?

Route::group('prefix' => 'wildlife', function() {

    Route::resource('birds',BirdsController::class);

});

Found the solution after modifying the route 'create' from;

Route::get('wildlife/birds/create', [BirdsController::class, 'create'])->name('birds.create');

to;

Route::get('wildlife/bird/create', [BirdsController::class, 'create'])->name('birds.create');

replaced the plural 'birds' to 'bird' only in create method and it worked.

Related