php-laravelのすべてのルートにデフォルトのパラメーターを追加する方法
多言語のウェブサイトを持っています。ここで、現在のロケールをすべてのプロジェクトルートのプレフィックスとして追加します。そのためには、ルートを使用するときはいつでも、ルートのロケールパラメータの値を常に指定する必要があります。これを行うにはもっと良い方法があると思います。
私のルートは次のようになります
Route::prefix('{locale}')->group(function() {
Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/blog', [App\Http\Controllers\PostController::class, 'index'])->name('blog');
});
URLのパスを次のようにします。
- http:// localhost / project / en/blogまたは
- http:// localhost / project / fa / blog
ミドルウェアSetLocaleもあり、通過するリクエストパスに応じてアプリのロケールを決定します。
これが私のミドルウェアコードです
class SetLocale
{{
public function handle(Request $ request、Closure $ next)
{{
$ locale = $ request-> segment(1);
if(!is_null($ locale)&&!in_array($ locale、config('app.locales')))// config('app.locales')= ['en'、'ar'、'fa']
中止(404);
$ html_dir = in_array($ locale、['en'])?'ltr':'rtl';
\ Illuminate \ Support \ Facades \ Config :: set('app.html_dir'、$ html_dir);
\ Illuminate \ Support \ Facades \ App :: setLocale($ locale);
$ next($ request);を返します。
}
}
答え :
解決策:
URLジェネレーターの これをミドルウェアに追加すると、 Laravel8.xドキュメント-URL生成-デフォルト値defaultsメソッドを使用して、これを正確に実行できます:
URL :: defaults(['locale' => $ locale]);
locale パラメータは、そのパラメータを使用してルートへのURLを生成するときにデフォルトになります。
{-code -1}
答え :
解決策:
グループルートを介して行う必要があります
https://laravel.com/docs/8.x/routing#route-groups 。
ごめんなさい。では、フォローするのはどうですか?
Route::prefix('{locale}')->middleware('SetLocale')->group(function() {
Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/blog', [App\Http\Controllers\PostController::class, 'index'])->name('blog');
});
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。