如何为laravel中的所有路由添加默认参数

Posted

技术标签:

【中文标题】如何为laravel中的所有路由添加默认参数【英文标题】:How to add a default parameter for all routes in laravel 【发布时间】:2022-01-21 22:19:27 【问题描述】:

我有一个多语言网站。我想在其中添加当前语言环境作为我所有项目路线的前缀。为此,无论何时我使用路由,我都必须始终为路由的语言环境参数提供一个值。我认为有更好的方法来做到这一点。

我的路线是这样的

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

【问题讨论】:

嗨 @Mohsen Amani,您可以查看这些链接:***.com/questions/25082154/… 和 laraveldaily.com/multi-language-routes-and-locales-with-auth 这些应该会有所帮助。 【参考方案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');
);

【讨论】:

我正在使用路由组兄弟,但是我通过语言环境的名称为组添加了一个前缀,我需要给它一个值。而我的问题是为这个参数增加价值 @MohsenAmani 我更新了我的答案,前缀应该返回路由实例,这样你也可以调用中间件方法 对不起,我没有解释,你在路由组上设置了中间件,我也做了同样的事情,但我在 web 中间件中添加了我的中间件。现在我正在更新问题并提供更多详细信息【参考方案2】:

您可以使用 URL 生成器的 defaults 方法执行此操作:

URL::defaults(['locale' => $locale]);

将其添加到您的中间件中,当使用该参数生成路由 URL 时,locale 参数将具有默认值。

Laravel 8.x Docs - URL Generation - Default Valuesdefaults

【讨论】:

以上是关于如何为laravel中的所有路由添加默认参数的主要内容,如果未能解决你的问题,请参考以下文章

如何为表单输入分配默认值 - Laravel 8

如何为as2中的方法定义默认参数值?

laravel 路由参数的默认值怎么设置

路由类型资源 Laravel 8 中方法的默认参数

如何为路由组中的所有请求设置标头

如何为函数中的向量参数提供默认值