Heim  >  Fragen und Antworten  >  Hauptteil

„Verwenden Sie Parameter als Präfixe, um Laravels „Auth::routes()“ in einer Präfixgruppe zu kapseln.“

Ich versuche, Laravel zu Lokalisierungszwecken in eine Präfixgruppe eingebunden zu verwenden Auth::routes():

Route::group(['prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}']], function () {
    Auth::routes();
});

In meinen Ansichten gebe ich beim Erstellen solcher Routen jetzt die aktuelle Sprache an route('password.confirm', app()->getLocale())

Aber wenn ich versuche, die Funktion „Passwort vergessen“ zu verwenden, wird eine Ausnahme ausgelöst. Ich denke, das liegt daran, dass Laravel intern einen Link zum Zurücksetzen des Passworts erstellt und dabei eine benannte Route verwendet, ohne den aktuellen Sprachparameter zu übergeben.

Illuminate\Routing\Exceptions\UrlGenerationException
Missing required parameter for [Route: password.reset] 
[URI: {locale}/password/reset/{token}] [Missing parameter: locale].

Ist es möglich, Auth::routes() auf irgendeine Weise global zu verwenden und den fehlenden „locale“-Parameter einzufügen? Oder was ist der empfohlene Ansatz, ohne die Authentifizierungsmethode von Laravel zu überschreiben?

P粉032900484P粉032900484257 Tage vor464

Antworte allen(1)Ich werde antworten

  • P粉697408921

    P粉6974089212024-01-11 12:56:03

    我找到了一个解决方案。感谢这个答案 https://stackoverflow.com/a/49380950/9405862 它激发了我向我的路由组添加一个中间件,该中间件为URL添加了缺少的参数:

    Route::group([
        'middleware' => HandleRouteLang::class,
        'prefix' => '{locale}',
        'where' => ['locale' => '[a-zA-Z]{2}']
    ], function () { 
        Auth::routes();
    });

    我的中间件现在看起来像这样:

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

    Antwort
    0
  • StornierenAntwort