📖 Scenario: You are building a simple Laravel web app that greets users. Sometimes users provide their name, and sometimes they don't. You want to create a route that can handle both cases gracefully.
🎯 Goal: Create a Laravel route with an optional parameter name. If the name is provided in the URL, the app should greet the user by name. If not, it should greet with a default message.
📋 What You'll Learn
Create a route with an optional parameter {name?}
Set a default value for the optional parameter inside the route callback
Return a greeting message that uses the name parameter if given
Return a default greeting message if name is not provided
💡 Why This Matters
🌍 Real World
Optional parameters in routes let web apps handle URLs with or without extra info, like user names or IDs, making navigation smoother.
💼 Career
Understanding optional route parameters is essential for Laravel developers to build flexible and user-friendly web applications.
Progress0 / 4 steps
1
Create a basic route
Create a Laravel route using Route::get for the URL path /greet that returns the string 'Hello, Guest!'.
Laravel
Hint
This route responds to /greet with a simple greeting.
2
Add an optional parameter
Modify the route path to include an optional parameter called {name?} after /greet.
Laravel
Hint
Optional parameters have a question mark ? after the name inside curly braces.
3
Add a parameter to the callback
Add a parameter called $name to the route callback function and set its default value to 'Guest'.
Laravel
Hint
Set the default value for $name in the function parameter list.
4
Use the parameter in the greeting
Change the return statement to use the $name parameter in the greeting message using string interpolation: "Hello, $name!".
Laravel
Hint
Use double quotes to include the variable $name inside the string.
Practice
(1/5)
1. What is the main purpose of optional parameters in Laravel functions or routes?
easy
A. To allow functions or routes to work with or without extra information
B. To force users to always provide all parameters
C. To make parameters required by default
D. To disable parameter validation
Solution
Step 1: Understand optional parameters
Optional parameters let functions or routes accept calls even if some parameters are missing.
Step 2: Identify the purpose
This flexibility means the function or route can work with or without extra info, improving usability.
Final Answer:
To allow functions or routes to work with or without extra information -> Option A
Quick Check:
Optional parameters = flexible input [OK]
Hint: Optional means parameters can be skipped safely [OK]
Common Mistakes:
Thinking optional means parameters are required
Confusing optional with disabling validation
Assuming optional parameters come before required ones
2. Which of the following is the correct way to define an optional parameter in a Laravel route closure?
easy
A. Route::get('/user/{id?}', function ($id) { return $id; });
B. Route::get('/user/{id?}', function ($id = null) { return $id; });
C. Route::get('/user/{?id}', function ($id) { return $id; });
D. Route::get('/user/{id}', function ($id = null) { return $id; });
Solution
Step 1: Check route parameter syntax
Optional parameters in routes use a question mark after the parameter name: {id?}.
Step 2: Check function parameter default
The function parameter must have a default value, like $id = null, to be optional.
Final Answer:
Route::get('/user/{id?}', function ($id = null) { return $id; }); -> Option B
Quick Check:
Optional param syntax = {id?} + default value [OK]
Hint: Use {param?} and default value in function [OK]
Common Mistakes:
Omitting the question mark in route parameter
Not giving a default value in function parameter
Placing question mark inside braces incorrectly
3. Given this Laravel controller method:
public function show($id, $page = 1) {
return "ID: $id, Page: $page";
}
What will be the output of show(5)?
medium
A. "ID: 5, Page: "
B. "ID: , Page: 1"
C. Error: Missing argument for $page
D. "ID: 5, Page: 1"
Solution
Step 1: Identify parameters and defaults
The method has a required parameter $id and an optional $page with default 1.
Step 2: Call with one argument
Calling show(5) sets $id=5 and uses default $page=1.
Final Answer:
"ID: 5, Page: 1" -> Option D
Quick Check:
Optional param uses default when missing [OK]
Hint: Optional params use default if not passed [OK]
A. Function parameters must not have default values
B. Default values cannot be strings
C. Optional parameters must be at the end; $id cannot be optional before $comment
D. Route parameters cannot have question marks
Solution
Step 1: Check order of optional parameters
In Laravel, optional parameters must come after all required ones and be at the end in order.
Step 2: Analyze parameter order
Here, $id is optional before $comment which is also optional, but $id is first. This is allowed only if both are optional and route matches accordingly.
Step 3: Identify route matching issue
Laravel cannot distinguish which parameter is missing if earlier optional parameters are skipped but later ones are present.
Final Answer:
Optional parameters must be at the end; $id cannot be optional before $comment -> Option C
Quick Check:
Optional params order matters [OK]
Hint: Put optional params only at the end [OK]
Common Mistakes:
Ignoring order of optional parameters
Thinking default values cannot be strings
Believing question marks are invalid in routes
5. You want to create a Laravel route that accepts a required category and an optional page number with default 1. Which of these route and controller method pairs is correct?
hard
A. Route::get('/items/{category}/{page?}', [ItemController::class, 'index']); public function index($category, $page = 1) { return "$category - $page"; }
B. Route::get('/items/{category?}/{page}', [ItemController::class, 'index']); public function index($category = 'all', $page) { return "$category - $page"; }
C. Route::get('/items/{category}/{page}', [ItemController::class, 'index']); public function index($category, $page = 1) { return "$category - $page"; }
D. Route::get('/items/{category?}/{page?}', [ItemController::class, 'index']); public function index($category = 'all', $page = 1) { return "$category - $page"; }
Solution
Step 1: Identify required and optional parameters in route
The required parameter category must come first without a question mark. The optional page comes after with a question mark.
Step 2: Match controller method parameters
The method must have $category first (required) and $page second with default 1.
Step 3: Check each option
Route::get('/items/{category}/{page?}', [ItemController::class, 'index']); public function index($category, $page = 1) { return "$category - $page"; } matches the correct route and method signature. Others either reverse order or make required params optional incorrectly.
Final Answer:
Option A with required category and optional page correctly defined -> Option A
Quick Check:
Required first, optional after with defaults [OK]
Hint: Required params first, optional with default after [OK]
Common Mistakes:
Making required params optional in route
Placing optional params before required ones
Not giving default values in method
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.