如何为 laravel 中的所有路由添加默认参数
How to add a default parameter for all routes in 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']
abort(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);
return $next($request);
}
}
你必须通过群组路由
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');
});
您可以使用 URL 生成器的 defaults
方法来做这件事:
URL::defaults(['locale' => $locale]);
将其添加到您的中间件中,locale
参数在使用该参数生成 URL 路由时将具有默认值。
我有一个多语言网站。我想在其中添加当前语言环境作为我所有项目路线的前缀。为此,我每次使用路线时都必须始终为路线的语言环境参数提供一个值。我认为有更好的方法可以做到这一点。
我的路线是这样的
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']
abort(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);
return $next($request);
}
}
你必须通过群组路由
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');
});
您可以使用 URL 生成器的 defaults
方法来做这件事:
URL::defaults(['locale' => $locale]);
将其添加到您的中间件中,locale
参数在使用该参数生成 URL 路由时将具有默认值。