Home >Backend Development >PHP Tutorial >Streamlining Route Parameters in Laravel Using URL Defaults
Managing URL parameters in Laravel applications, particularly those with multiple languages or complex routing patterns, can become repetitive. Laravel provides an elegant solution through URL defaults, allowing you to set application-wide default values for URL parameters. Let's explore this powerful feature's implementation.
URL defaults enable you to define global default values for URL parameters across your application. This proves particularly valuable for handling common parameters like language preferences or regional settings.
Let's implement URL defaults in a multilingual application with currency support:
<!-- Syntax highlighted by torchlight.dev --><?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\URL; class SetUrlDefaults { public function handle(Request $request, Closure $next) { URL::defaults([ 'locale' => $request->user()?->preferred_language ?? config('app.locale'), 'currency' => $request->user()?->preferred_currency ?? 'USD' ]); return $next($request); } }
Register the middleware in your kernel:
<!-- Syntax highlighted by torchlight.dev --><?php namespace App\Http; class Kernel extends HttpKernel { protected $middleware = [ // ... other middleware \App\Http\Middleware\SetUrlDefaults::class, ]; }
Implementing the routing structure:
<!-- Syntax highlighted by torchlight.dev --><?php use App\Http\Controllers\ProductController; Route::prefix('{locale}/{currency}')->group(function () { Route::get('products', [ProductController::class, 'index']) ->name('products.index'); Route::get('products/{product}', [ProductController::class, 'show']) ->name('products.show'); }); class ProductController extends Controller { public function index() { // URLs will automatically use default locale and currency return view('products.index', [ 'products' => Product::paginate(20), 'categoryUrl' => route('products.category', ['category' => 'electronics']) ]); } public function changePreferences(Request $request, $locale, $currency) { $request->user()->update([ 'preferred_language' => $locale, 'preferred_currency' => $currency ]); return redirect()->back(); } }
In your views, you can generate URLs without explicitly specifying the defaults:
<!-- Syntax highlighted by torchlight.dev --><!-- Products listing view --> <nav> <a href="{{ route('products.index') }}">{{ __('All Products') }}</a> <a href="{{ route('products.show', $product) }}">{{ $product->name }}</a> </nav> <!-- Only override when needed --> <a href="{{ route('products.index', ['currency' => 'EUR']) }}"> {{ __('View in Euros') }} </a>
This implementation provides clean, maintainable routing while automatically handling user preferences across your application.
The above is the detailed content of Streamlining Route Parameters in Laravel Using URL Defaults. For more information, please follow other related articles on the PHP Chinese website!