繁体   English   中英

如何在Laravel 5中定义默认路由参数

[英]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中以不同的方式注册中间件。

更新

为了使助手生成具有当前语言环境的路由:

  • 创建文件夹应用程序/支持。
  • 创建助手文件app / Support / helpers.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_routeroute相同的参数调用locale_route ,以创建在查询参数中添加了当前语言环境的url。

我希望这是您要寻找的。 使用查询字符串参数生成路由

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM