Skip to main content

Overview

Ziggy supports Laravel’s URL::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 use URL::defaults() to set default parameter values that apply to all route generation:
These defaults are typically set in middleware, so they can be based on the current request:

Using Defaults with Ziggy

When you set defaults with URL::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:
The defaults key contains all parameter defaults set via URL::defaults().
When generating a URL, Ziggy:
  1. Identifies which route parameters have defaults
  2. Includes those defaults in the parameter object
  3. 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:
If your defaults change based on the current user or request (like in the multi-tenant example), you should use the @routes Blade directive instead of generating a static file. This ensures defaults are always current.

Parameter Priority

When generating a URL, Ziggy merges parameters in this order (later sources override earlier ones):
  1. Default parameters from URL::defaults()
  2. Explicit parameters passed to route()

Best Practices

This ensures defaults are based on the current request context:
If your defaults change per-user or per-request:
If your app relies on certain defaults being set, document this clearly:

Debugging Defaults

You can inspect Ziggy’s current defaults in JavaScript:
Or in Laravel:

Next Steps

Router Class

Learn about Ziggy’s Router class and its methods

Filtering Routes

Control which routes are included in Ziggy