Maison > Questions et réponses > le corps du texte
J'essaie d'utiliser Laravel enveloppé dans un groupe de préfixes à des fins de localisation Auth::routes()
:
Route::group(['prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}']], function () { Auth::routes(); });
À mon avis, je fournis désormais la langue actuelle lors de la création d'itinéraires comme celui-ci route('password.confirm', app()->getLocale())
Mais lorsque j'essaie d'utiliser la fonctionnalité "Mot de passe oublié", une exception est générée. Je pense que c'est parce que Laravel crée un lien de réinitialisation de mot de passe en interne, en utilisant une route nommée sans transmettre le paramètre de langue actuel.
Illuminate\Routing\Exceptions\UrlGenerationException Missing required parameter for [Route: password.reset] [URI: {locale}/password/reset/{token}] [Missing parameter: locale].
Est-il possible d'utiliser Auth::routes()
globalement d'une manière ou d'une autre et d'injecter le paramètre « locale » manquant ? Ou quelle est l'approche recommandée sans remplacer la méthode d'authentification de Laravel ?
P粉6974089212024-01-11 12:56:03
J'ai trouvé une solution. Merci pour cette réponse https://stackoverflow.com/a/49380950/9405862 Cela m'a inspiré à ajouter un middleware à mon groupe de routage qui ajoute les paramètres manquants à l'URL :
Route::group([ 'middleware' => HandleRouteLang::class, 'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}'] ], function () { Auth::routes(); });
Mon middleware ressemble maintenant à ceci :
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Contracts\Routing\UrlGenerator; class HandleRouteLang { private $url; public function __construct(UrlGenerator $url) { $this->url = $url; } public function handle($request, Closure $next) { // 通过URL中的locale参数设置当前语言 if ($request->route("locale")) { app()->setlocale($request->route("locale")); } // 为通过命名路由创建的路由设置默认语言值 $this->url->defaults([ 'locale' => app()->getLocale(), ]); return $next($request); } }