How to Use Optional Parameters in Route in Laravel
In Laravel, you can make route parameters optional by adding a question mark
? after the parameter name in the route definition, like {id?}. You must also provide a default value for the parameter in the controller or closure to avoid errors when the parameter is missing.Syntax
To define an optional parameter in a Laravel route, add a question mark ? after the parameter name inside curly braces. You also need to provide a default value in the route's callback or controller method to handle cases when the parameter is not provided.
{parameter?}: Marks the parameter as optional.- Default value in method: Ensures the code works even if the parameter is missing.
php
Route::get('/user/{id?}', function ($id = null) { return $id ? "User ID: $id" : 'No User ID provided'; });
Example
This example shows a route with an optional id parameter. If the id is provided in the URL, it displays the user ID. If not, it shows a default message.
php
<?php use Illuminate\Support\Facades\Route; Route::get('/profile/{id?}', function ($id = null) { if ($id) { return "Profile ID: $id"; } return 'No Profile ID provided'; });
Output
Visiting /profile/123 outputs: Profile ID: 123
Visiting /profile outputs: No Profile ID provided
Common Pitfalls
Common mistakes include forgetting to add the question mark ? to the parameter, or not providing a default value in the callback or controller method. This causes Laravel to expect the parameter always, leading to 404 errors or exceptions.
Also, optional parameters should be placed at the end of the route URI to avoid routing conflicts.
php
/* Wrong: Missing question mark and default value */ Route::get('/item/{id}', function ($id) { return $id; }); /* Right: Optional parameter with question mark and default value */ Route::get('/item/{id?}', function ($id = null) { return $id ?? 'No ID'; });
Quick Reference
| Concept | Syntax | Notes |
|---|---|---|
| Optional Parameter | {param?} | Add question mark to make parameter optional |
| Default Value | function ($param = null) | Provide default value in callback or controller |
| Parameter Position | End of URI | Place optional parameters at the end to avoid conflicts |
| Accessing Parameter | $param | Use parameter inside closure or controller method |
Key Takeaways
Add a question mark after the parameter name in the route to make it optional.
Always provide a default value for optional parameters in your route callback or controller method.
Place optional parameters at the end of the route URI to prevent routing issues.
Without a default value, Laravel will expect the parameter and may throw errors if missing.
Use optional parameters to create flexible routes that work with or without certain data.