我正在使用Laravel 5构建一个多语言网站。
我知道在 Laravel 中,我可以为路由定义prefix
,例如:
http://domain/en/users/1
http://domain/en/shop/1
在中间件中,我可以获取 url 路径段来检测当前请求的语言并设置语言环境。
但是无论如何我都找不到默认为像 folowings 这样的路由添加 lang 参数:
http://domain/users/1?lang=en
http://domain/shop/1?lang=en
或者当我调用时,是否有任何钩接到框架的路由函数以将默认参数?lang=ja
附加到所有路由中?(ja 是之前在中间件中设置的应用程序的当前区域设置(
谢谢!
您可以创建一个中间件,如果请求没有默认的"lang"查询参数,则设置一个中间件。它将适用于对应用的所有请求,因此您可以在每个路由处理程序中获取 lang 参数。
在控制台中创建中间件 LangFilter(在项目目录中(:
php artisan make:middleware LangFilter
然后打开./app/Http/Kernel.php
并添加:
'App'Http'Middleware'LangFilter::class
到$middleware
数组。现在打开你创建的中间件,即./app/Http/Middleware/LangFilter.php
并添加检查和设置代码:
<?php
namespace App'Http'Middleware;
use Closure;
class LangFilter
{
/**
* Handle an incoming request.
*
* @param 'Illuminate'Http'Request $request
* @param 'Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Checks for lang in the parameters.
if($request->input('lang') == null) {
// Adds the default one since it doesn't have one.
$request->merge(array('lang' => 'en'));
}
return $next($request);
}
}
如果只想对现有所有路由的子集进行这种过滤,则需要在 Kernel.php 中以不同的方式注册中间件。
更新
对于制作使用当前语言环境生成路由的帮助程序:
- 创建文件夹应用/支持。
- 创建帮助程序文件应用/支持/帮助程序.php
打开帮助程序.php,并添加以下代码以添加帮助程序:
<?php function locale_route($name, $parameters = [], $absolute = true) { return route($name, array_merge($parameters, [ 'lang' => App::getLocale() ]), $absolute); } ?>
将帮助程序文件添加到 composer.json 中的作曲家自动加载中:
"autoload" : { "files" : [ "app/Support/helpers.php" ] }
现在在控制台中运行:
composer dumpautoload
现在,您可以使用提供给route
的相同参数调用locale_route
,以创建在查询参数中添加了当前区域设置的 URL。
我希望这就是你要找的。使用查询字符串参数生成路由