当前位置: 首页 > 知识库问答 >
问题:

如何在Laravel 5中定义默认管线参数

吴唯
2023-03-14

我正在使用Laravel5构建一个多语言网站。

我知道,在Laravel中,我可以为如下路线定义前缀

http://domain/en/users/1
http://domain/en/shop/1

在中间件中,我可以获取url路径的片段来检测语言并设置当前请求的区域设置。

但我找不到无论如何添加lang参数在默认情况下的路由像folowings:

http://domain/users/1?lang=en
http://domain/shop/1?lang=en

或者有什么方法可以钩住框架的路由函数来附加默认参数?lang=ja进入所有路线时,我打电话?(ja是之前在中间件中设置的应用程序的当前区域设置)

谢谢

共有2个答案

吕奇
2023-03-14

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

颜宸
2023-03-14

如果请求没有“lang”查询参数,您可以创建一个中间件来设置默认的“lang”查询参数。它将适用于应用程序的所有请求,因此您可以在每个路由处理程序中获取lang参数

在控制台中(在项目目录中)创建一个过滤器:

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);
    }
}

如果您想对所有路由的子集进行这种过滤,您需要以不同的方式在K中注册中间件ernel.php.

使现代化

用于生成具有当前区域设置的路由的助手:

>

  • 创建文件夹应用程序/支持
  • 创建助手文件app/Support/helpers。php
  • 打开助手。php,并添加以下代码以添加帮助程序:

    <?php
      function locale_route($name, $parameters = [], $absolute = true) {
        return route($name, array_merge($parameters, [
          'lang' => App::getLocale()
          ]), $absolute);
      }
    ?>
    

    将帮助文件添加到composer中的composer自动加载。json:

    "autoload" : {
      "files" : [
        "app/Support/helpers.php"
      ]
    }
    

    现在在控制台中运行:

     composer dumpautoload
    

    现在,您可以使用为route提供的相同参数调用locale\u route,以创建在查询参数中添加了当前语言环境的URL。

  •  类似资料:
    • 本文向大家介绍Python如何定义有默认参数的函数,包括了Python如何定义有默认参数的函数的使用技巧和注意事项,需要的朋友参考一下 问题 你想定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值。 解决方案 定义一个有可选参数的函数是非常简单的,直接在函数定义中给参数指定一个默认值,并放到参数列表最后就行了。例如: 如果默认参数是一个可修改的容器比如一个列表、集合或者字典,可以使用

    • 当我在JAX-RS中添加字符串的默认值时,它不接受该值。它保持为null或空。 当我将状态传递为空或或未定义时,它将保持为空或或未定义。它不会将默认值视为已确认。

    • 根据enable_if结构的定义: 我想知道怎么做 特别是: 在

    • 我想在我的子组件中有一个默认路由(使用设置),并自动将参数传递给它。我在文档中找不到如何做到这一点。我有一个具有以下路由的父组件: 以及子组件,其具有: 这当然会失败:我无法弄清楚如何将一些默认参数传递给第一个路由。我确实通过创建另一个没有参数的路由并将其用作默认值来启动它: 但这当然并不理想。到目前为止,我还没有找到比使用不带参数的路由,然后使用一些默认参数立即重定向更好的方法。难道没有更好的办

    • 问题内容: 我很难理解算法中问题的根本原因。然后,通过逐步简化函数,我发现Python中对默认参数的求值行为不符合我的预期。 代码如下: 问题是,如果未显式给出属性,则Node类的每个实例都共享相同的属性,例如: 我不了解此设计决定的逻辑吗?为什么Python设计人员决定在定义时评估默认参数?这对我来说似乎很违反直觉。 问题答案: 另一种选择是重量级的-将“默认参数值”存储为函数对象的“ thun

    • 问题 你想定义一个函数或者方法,它的一个或多个参数是可选的并且有一个默认值。 解决方案 定义一个有可选参数的函数是非常简单的,直接在函数定义中给参数指定一个默认值,并放到参数列表最后就行了。例如: def spam(a, b=42): print(a, b) spam(1) # Ok. a=1, b=42 spam(1, 2) # Ok. a=1, b=2 如果默认参数是一个可修改的容器