laravel - 如何自动将应用程序语言环境设置为所有 laravel 路由的前缀?
问题描述
我正在尝试以自动方式获取实际的应用程序语言环境作为我所有路由的前缀,atm 每次调用这样的路由时我都会将其作为参数提供:
网页.php
Route::group(['prefix' => '{language}'], function() {
Route::get(__('contact'), function () {
return view('pages.contact');
})->name('contact');
});
header.blade.php
<li class="nav-item">
<a class="nav-link" href="{{route('contact', app()->getLocale())}}">@lang('contact')</a>
</li>
这实际上有效,例如显示 en_US/contact,有没有办法避免在路由呼叫中提供语言环境?
编辑:经过一些回答后,我按照这里的文档https://laravel.com/docs/5.8/urls#default-values,所以我的代码看起来像这样:
中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class SetDefaultLocaleForUrls
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
URL::defaults(['locale' => app()->getLocale()]);
return $next($request);
}
}
内核.php:
protected $routeMiddleware = [
....
'locale' => \App\Http\Middleware\SetDefaultLocaleForUrls::class,
....
];
网页.php:
Route::group(['prefix' => '{locale}', 'middleware' => 'locale'], function () {
Route::get(__('contact'), function () {
return view('pages.welcome');
})->name('contact');
});
但仍然需要给语言环境我做错了什么?
"Missing required parameters for [Route: contact] [URI: {locale}/contact]"
EDIT2:注意中间件仅在我在 URL 上设置 locale 参数时才有效,如果我不写它不会触发,也许有错误
解决方案
您可以使用该方法设置 url 的默认值URL::defaults()
。您可以将其放在中间件中以使其适用于所有路由。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\URL;
class SetDefaultLocaleForUrls
{
public function handle($request, Closure $next)
{
URL::defaults(['locale' => $request->user()->locale]);
return $next($request);
}
}
此处的文档中提到了它: https ://laravel.com/docs/5.8/urls#default-values
推荐阅读
- typescript - 错误类型错误:BlinkId 不是 Ionic 4 的构造函数
- android - HEVC 编码器(从 JPG 转换为 HEIC)
- arrays - 创建空字符串数组 BigQuery
- asp.net-mvc - 我的 Kendo UI 项目在取消单击按钮时出现此错误,该错误采用未定义的 'uid'"
- python-3.x - 函数调用作为参数
- imap - 对于 Office 365,节点 Imap 无法更改为看不见
- html - 将 html 特殊字符定义为要在 XSD 中被 Unicode 字符替换的实体或元素
- html - 之间的区别和
- c# - PreBuildAction 使用命令输入调用 exe 时的异常
- python - 我需要重复切片我的数据框