Rumah > Soal Jawab > teks badan
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粉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); } }