"Gunakan parameter sebagai awalan untuk merangkum `Auth::routes()` Laravel dalam kumpulan awalan"
P粉032900484
P粉032900484 2024-01-10 17:53:38
0
1
562

Saya cuba menggunakan Laravel yang dibalut dalam kumpulan awalan untuk tujuan penyetempatan Auth::routes():

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

Pada pandangan saya, saya kini menyediakan bahasa semasa apabila membuat laluan seperti ini route('password.confirm', app()->getLocale())

Tetapi apabila saya cuba menggunakan ciri "Lupa Kata Laluan", ia memberikan pengecualian. Saya rasa ini kerana Laravel mencipta pautan tetapan semula kata laluan secara dalaman, menggunakan laluan bernama tanpa melepasi parameter bahasa semasa.

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

Adakah mungkin untuk menggunakan Auth::routes() secara global dalam beberapa cara dan menyuntik parameter "tempatan" yang hilang? Atau apakah pendekatan yang disyorkan tanpa mengatasi kaedah pengesahan Laravel?

P粉032900484
P粉032900484

membalas semua(1)
P粉697408921

Saya jumpa penyelesaian. Terima kasih atas jawapan ini https://stackoverflow.com/a/49380950/9405862 Ia memberi inspirasi kepada saya untuk menambah perisian tengah pada kumpulan penghalaan saya yang menambahkan parameter yang hilang pada URL:

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

Perisian tengah saya kini kelihatan seperti ini:

<?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);
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan