Overview
Ziggy supports Laravel’sURL::defaults() feature, which allows you to set default values for route parameters. This is particularly useful for multi-tenant applications or when you need to inject contextual values (like locale) into routes automatically.
Laravel’s URL::defaults()
In Laravel, you can useURL::defaults() to set default parameter values that apply to all route generation:
Using Defaults with Ziggy
When you set defaults withURL::defaults(), Ziggy automatically includes them in its configuration. These defaults are then applied when generating URLs in JavaScript:
You don’t need to pass the
locale parameter explicitly—Ziggy automatically uses the default value from Laravel.How It Works
Ziggy’s PHP code includes default parameters in its configuration:Default Parameters in Ziggy.php
Default Parameters in Ziggy.php
defaults key contains all parameter defaults set via URL::defaults().Applying Defaults in Router.js
Applying Defaults in Router.js
- Identifies which route parameters have defaults
- Includes those defaults in the parameter object
- Merges explicit parameters over defaults
Overriding Defaults
You can override default values by passing explicit parameters:Explicit parameters always take precedence over defaults.
Multiple Default Parameters
You can set defaults for multiple parameters:Common Use Cases
Multi-Language Sites
Set the user’s locale as a default parameter:Multi-Tenant Applications
Set the tenant identifier as a default:API Versioning
Defaults with Route-Model Binding
Defaults work seamlessly with route-model binding:Defaults in the Generated Config
When you generate Ziggy’s configuration file, defaults are included:Parameter Priority
When generating a URL, Ziggy merges parameters in this order (later sources override earlier ones):- Default parameters from
URL::defaults() - Explicit parameters passed to
route()
Parameter Merging Implementation
Parameter Merging Implementation
Best Practices
Set defaults in middleware
Set defaults in middleware
This ensures defaults are based on the current request context:
Use the @routes directive for dynamic defaults
Use the @routes directive for dynamic defaults
If your defaults change per-user or per-request:
Document required defaults
Document required defaults
If your app relies on certain defaults being set, document this clearly:
Debugging Defaults
You can inspect Ziggy’s current defaults in JavaScript:Next Steps
Router Class
Learn about Ziggy’s Router class and its methods
Filtering Routes
Control which routes are included in Ziggy