Rumah  >  Soal Jawab  >  teks badan

"Gunakan parameter sebagai awalan untuk merangkum `Auth::routes()` Laravel dalam kumpulan awalan"

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粉032900484P粉032900484257 hari yang lalu463

membalas semua(1)saya akan balas

  • P粉697408921

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

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

    balas
    0
  • Batalbalas