"Utilisez des paramètres comme préfixes pour encapsuler `Auth::routes()` de Laravel dans un groupe de préfixes"
P粉032900484
P粉032900484 2024-01-10 17:53:38
0
1
517

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粉032900484
P粉032900484

répondre à tous(1)
P粉697408921

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);
    }
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal