„Verwenden Sie Parameter als Präfixe, um Laravels „Auth::routes()' in einer Präfixgruppe zu kapseln.'
P粉032900484
P粉032900484 2024-01-10 17:53:38
0
1
524

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

Antworte allen(1)
P粉697408921

我找到了一个解决方案。感谢这个答案 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);
    }
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage