Bird
Raised Fist0
Laravelframework~10 mins

Resource controllers in Laravel - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Resource controllers
Route receives HTTP request
↓
Route linked to Resource Controller
↓
Controller method matched by HTTP verb and URL
↓
Controller method executes logic
↓
Return response (view, redirect, JSON)
↓
Client receives response
The flow shows how a Laravel route maps HTTP requests to resource controller methods based on the request type and URL, then returns a response.
Execution Sample
Laravel
Route::resource('photos', PhotoController::class);

// HTTP GET /photos -> index()
// HTTP GET /photos/1 -> show(1)
// HTTP POST /photos -> store()
This code registers a resource controller that automatically maps HTTP verbs and URLs to controller methods.
Execution Table
StepHTTP RequestMatched Controller MethodAction TakenResponse
1GET /photosindex()Fetch all photosReturn photos list view
2GET /photos/1show(1)Fetch photo with ID 1Return photo detail view
3POST /photosstore()Validate and save new photoRedirect to photos list
4PUT /photos/1update(1)Validate and update photo ID 1Redirect to photo detail
5DELETE /photos/1destroy(1)Delete photo ID 1Redirect to photos list
6GET /photos/createcreate()Show form to create photoReturn create photo form view
7GET /photos/1/editedit(1)Show form to edit photo ID 1Return edit photo form view
8PATCH /photos/1update(1)Validate and update photo ID 1Redirect to photo detail
9GET /unknownNo matchNo controller method404 Not Found
💡 Execution stops when a matching route and controller method is found or 404 if no match.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5After Step 6After Step 7After Step 8Final
HTTP RequestNoneGET /photosGET /photos/1POST /photosPUT /photos/1DELETE /photos/1GET /photos/createGET /photos/1/editPATCH /photos/1GET /unknown
Controller MethodNoneindex()show(1)store()update(1)destroy(1)create()edit(1)update(1)No match
ResponseNonePhotos list viewPhoto detail viewRedirect to photos listRedirect to photo detailRedirect to photos listCreate form viewEdit form viewRedirect to photo detail404 Not Found
Key Moments - 3 Insights
Why does a GET request to /photos call the index() method?
Because the resource controller maps GET /photos to the index() method as shown in execution_table row 1, which is the standard for listing resources.
What happens if the URL does not match any resource route?
As shown in execution_table row 9, no controller method matches, so Laravel returns a 404 Not Found response.
How does Laravel know which method to call for POST /photos?
The HTTP verb POST combined with the URL /photos matches the store() method in the resource controller, as seen in execution_table row 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, which controller method handles GET /photos/1/edit?
Aupdate(1)
Bshow(1)
Cedit(1)
Dcreate()
💡 Hint
Check execution_table row 7 for GET /photos/1/edit
At which step does the response become 'Redirect to photos list'?
AStep 3
BStep 4
CStep 5
DStep 6
💡 Hint
Look at execution_table rows 3 and 5 for redirect responses
If you send a DELETE request to /photos/1, what response will you get?
APhoto detail view
BRedirect to photos list
CCreate photo form
D404 Not Found
💡 Hint
See execution_table row 5 for DELETE /photos/1
Concept Snapshot
Resource controllers in Laravel map HTTP verbs and URLs to controller methods automatically.
Use Route::resource('name', Controller::class) to register.
Common methods: index(), create(), store(), show(), edit(), update(), destroy().
Each method handles a specific action (list, show, create form, save, edit form, update, delete).
Laravel routes requests to these methods based on HTTP verb and URL pattern.
Unmatched routes return 404 Not Found.
Full Transcript
Resource controllers in Laravel help organize code by linking HTTP requests to controller methods automatically. When you register a resource controller with Route::resource, Laravel sets up routes for common actions like listing all items, showing one item, creating, updating, and deleting. For example, a GET request to /photos calls the index() method to list photos, while a POST to /photos calls store() to save a new photo. If a request URL does not match any resource route, Laravel returns a 404 error. This flow makes it easy to build RESTful applications by following a simple pattern.

Practice

(1/5)
1. What is the main purpose of a resource controller in Laravel?
easy
A. To create views without a controller
B. To handle database migrations automatically
C. To group all CRUD actions for a resource in one controller
D. To manage user authentication only

Solution

  1. Step 1: Understand what resource controllers do

    Resource controllers in Laravel group related actions like create, read, update, and delete (CRUD) for a resource in one controller class.
  2. Step 2: Compare options with this definition

    Only To group all CRUD actions for a resource in one controller correctly describes this grouping of CRUD actions. Other options describe unrelated features.
  3. Final Answer:

    To group all CRUD actions for a resource in one controller -> Option C
  4. Quick Check:

    Resource controller = CRUD grouping [OK]
Hint: Resource controllers group CRUD actions in one place [OK]
Common Mistakes:
  • Confusing resource controllers with migrations
  • Thinking resource controllers handle views alone
  • Assuming resource controllers manage authentication
2. Which of the following is the correct syntax to register a resource controller named PostController for the route /posts?
easy
A. Route::resource('posts', PostController::class);
B. Route::controller('posts', PostController::class);
C. Route::get('posts', PostController::resource());
D. Route::resource('PostController', 'posts');

Solution

  1. Step 1: Recall Laravel resource route syntax

    The correct syntax uses Route::resource('uri', ControllerClass::class) to register all resource routes.
  2. Step 2: Check each option

    Route::resource('posts', PostController::class); matches the correct syntax. Route::controller('posts', PostController::class); uses controller which is different. Route::get('posts', PostController::resource()); is invalid syntax. Route::resource('PostController', 'posts'); swaps parameters incorrectly.
  3. Final Answer:

    Route::resource('posts', PostController::class); -> Option A
  4. Quick Check:

    Resource route syntax = Route::resource(uri, Controller::class) [OK]
Hint: Use Route::resource('uri', Controller::class) to register resource routes [OK]
Common Mistakes:
  • Using Route::controller instead of Route::resource
  • Swapping URI and controller parameters
  • Calling resource() as a method on controller instance
3. Given this resource controller route registration:
Route::resource('photos', PhotoController::class);
Which URL and HTTP method will call the destroy method in PhotoController for photo with ID 5?
medium
A. PUT /photos/5/destroy
B. GET /photos/5/destroy
C. POST /photos/5/delete
D. DELETE /photos/5

Solution

  1. Step 1: Recall resource route conventions for destroy

    The destroy method is called with HTTP DELETE on the resource URI with the ID, e.g., DELETE /photos/{id}.
  2. Step 2: Match options to this pattern

    DELETE /photos/5 matches DELETE /photos/5. Other options use wrong HTTP methods or incorrect URLs.
  3. Final Answer:

    DELETE /photos/5 -> Option D
  4. Quick Check:

    Destroy = DELETE /resource/{id} [OK]
Hint: Destroy uses DELETE method on /resource/{id} URL [OK]
Common Mistakes:
  • Using GET or POST instead of DELETE for destroy
  • Adding extra path segments like /destroy or /delete
  • Confusing PUT with DELETE method
4. Consider this route registration:
Route::resource('users', UserController::class);
Which of the following code snippets will cause a runtime error when trying to access the show method?
medium
A. public function show() { return 'User not found'; }
B. public function show(User $user) { return $user; }
C. public function show($id) { return view('user.show', compact('id')); }
D. public function show($id) { return User::findOrFail($id); }

Solution

  1. Step 1: Understand show method parameter requirements

    The show method expects either an ID parameter or a model instance via route model binding.
  2. Step 2: Analyze each option

    public function show() { return 'User not found'; } has no parameter, so Laravel cannot pass the required ID or model, causing a runtime error. Others have correct parameters.
  3. Final Answer:

    public function show() { return 'User not found'; } -> Option A
  4. Quick Check:

    Show method must accept ID or model parameter [OK]
Hint: Show method needs parameter for ID or model [OK]
Common Mistakes:
  • Omitting parameters in show method
  • Using wrong parameter types without binding
  • Ignoring route model binding requirements
5. You want to create a resource controller for Product but only want to generate routes for index, show, and store methods. Which is the correct way to register this in routes/web.php?
hard
A. Route::resource('products', ProductController::class)->except(['create', 'edit']);
B. Route::resource('products', ProductController::class)->only(['index', 'show', 'store']);
C. Route::resource('products', ProductController::class)->skip(['create', 'edit']);
D. Route::resource('products', ProductController::class)->filter(['index', 'show', 'store']);

Solution

  1. Step 1: Recall how to limit resource routes

    Laravel allows limiting routes using the only method with an array of method names.
  2. Step 2: Evaluate each option

    A uses except(['create', 'edit']) which excludes only create and edit, leaving index, store, show, update, and destroy. B correctly uses only(['index', 'show', 'store']). C and D use invalid methods skip and filter.
  3. Final Answer:

    Route::resource('products', ProductController::class)->only(['index', 'show', 'store']); -> Option B
  4. Quick Check:

    Limit resource routes with only([...]) [OK]
Hint: Use ->only([...]) to limit resource controller routes [OK]
Common Mistakes:
  • Using invalid methods like skip or filter
  • Confusing only with except
  • Not passing array to only method
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard