[英]How can I define default route parameters in Laravel 5
我正在使用Laravel 5建立一个多语言站点。
我知道在Laravel中,我可以为路由定义prefix
,例如:
http://domain/en/users/1
http://domain/en/shop/1
在中间件中,我可以获取url路径段以检测语言并设置当前Request的语言环境。
但是我仍然找不到在默认情况下为以下路线添加lang参数的方法:
http://domain/users/1?lang=en
http://domain/shop/1?lang=en
还是无论如何我都可以连接到Framework的路由功能以将默认参数?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中以不同的方式注册中间件。
更新
为了使助手生成具有当前语言环境的路由:
打开helpers.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
现在,您可以locale_route
与route
相同的参数调用locale_route
,以创建在查询参数中添加了当前语言环境的url。
我希望这是您要寻找的。 使用查询字符串参数生成路由
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.