Maison >développement back-end >tutoriel php >Rationalisation des paramètres de l'itinéraire dans Laravel à l'aide de défauts d'URL
Gestion des paramètres d'URL dans les applications Laravel, en particulier ceux avec plusieurs langues ou des modèles de routage complexes, peuvent devenir répétitifs. Laravel fournit une solution élégante par défaut d'URL, vous permettant de définir des valeurs par défaut à l'échelle de l'application pour les paramètres d'URL. Explorons l'implémentation de cette puissante fonctionnalité.
Les défauts d'URL vous permettent de définir des valeurs par défaut globales pour les paramètres URL sur votre application. Cela s'avère particulièrement utile pour gérer les paramètres communs comme les préférences linguistiques ou les paramètres régionaux.
Implémentons les défauts d'URL dans une application multilingue avec support de devise:
<!-- 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); } }
Enregistrez le middleware dans votre noyau:
<!-- Syntax highlighted by torchlight.dev --><?php namespace App\Http; class Kernel extends HttpKernel { protected $middleware = [ // ... other middleware \App\Http\Middleware\SetUrlDefaults::class, ]; }
Implémentation de la structure de routage:
<!-- 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(); } }
Dans vos vues, vous pouvez générer des URL sans spécifier explicitement les valeurs par défaut:
<!-- 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>
Cette implémentation fournit un routage propre et maintenable tout en gérant automatiquement les préférences des utilisateurs sur votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!