How can I define default route parameters in Laravel 5
我正在使用Laravel 5建立一个多语言站点。
我知道在Laravel中,我可以为以下路径定义
1 2 | http://domain/en/users/1 http://domain/en/shop/1 |
在中间件中,我可以获取url路径段以检测语言并设置当前Request的语言环境。
但是我仍然找不到默认添加lang参数的foolings这样的路由:
1 2 | http://domain/users/1?lang=en http://domain/shop/1?lang=en |
或者无论如何我调用时都可以挂接到Framework的路由功能以将默认参数
(ja是在中间件之前设置的应用程序的当前语言环境)
谢谢!
您可以创建一个中间件,如果请求中没有该中间件,则该中间件将设置默认的" lang"查询参数。它会处理对您应用程序的所有请求,因此您可以在每个路由处理程序中获取lang参数。
在控制台中(在项目目录中)创建中间件LangFilter:
1 | php artisan make:middleware LangFilter |
然后打开
1 | \\App\\Http\\Middleware\\LangFilter::class |
到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php namespace App\\Http\\Middleware; use Closure; class LangFilter { /** * Handle an incoming request. * * @param \\Illuminate\\Http\ equest $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中以不同的方式注册中间件。
更新
用于使助手生成具有当前语言环境的路由:
- 创建文件夹应用程序/支持。
- 创建助手文件app / Support / helpers.php
-
打开helpers.php,并添加以下代码以添加帮助器:
1
2
3
4
5
6
7<?php
function locale_route($name, $parameters = [], $absolute = true) {
return route($name, array_merge($parameters, [
'lang' => App::getLocale()
]), $absolute);
}
?> -
将帮助程序文件添加到composer.json中的composer自动加载中:
1
2
3
4
5"autoload" : {
"files" : [
"app/Support/helpers.php"
]
} -
现在在控制台中运行:
1composer dumpautoload
现在,您可以使用与
我希望这是您要寻找的。使用查询字符串参数
生成路由