Maison  >  Questions et réponses  >  le corps du texte

"Utilisez des paramètres comme préfixes pour encapsuler `Auth::routes()` de Laravel dans un groupe de préfixes"

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粉032900484P粉032900484257 Il y a quelques jours459

répondre à tous(1)je répondrai

  • P粉697408921

    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);
        }
    }

    répondre
    0
  • Annulerrépondre