【问题标题】:How can I automatically add some query parameters to all links in Laravel Blade templates?如何自动为 Laravel Blade 模板中的所有链接添加一些查询参数?
【发布时间】:2021-09-04 10:14:57
【问题描述】:

我正在使用 Laravel 8。 我使用 route() 助手在 Blade 模板中显示一些链接:

    <a href="{{ route('foo', ['bar'=>'baz']) }}">Hello world</a>

结果如下:

    <a href="https://example.com/foo?bar=baz">Hello world</a>

但是,我希望将更多查询参数自动添加到 url:

    <a href="https://example.com/foo?bar=baz&src=mailing">Hello world</a>

理想情况下,我想使用 Blade 指令激活此功能

<a href="{{ route('foo', ['bar'=>'baz']) }}">Hello world</a>
<a href="{{ route('cool') }}">Cool!</a>
<a href="{{ route('icecream', ['flavour'=>'strawberry']) }}">Strawberry icecream</a>

<hr>

@withqueryparams(['src'=>'mailing'])
{{-- same code here, but the result will differ --}}
<a href="{{ route('foo', ['bar'=>'baz']) }}">Hello world</a>
<a href="{{ route('cool') }}">Cool!</a>
<a href="{{ route('icecream', ['flavour'=>'strawberry']) }}">Strawberry icecream</a>
@withendqueryparams
<a href="https://example.com/foo?bar=baz">Hello world</a>
<a href="https://example.com/cool">Cool!</a>
<a href="https://example.com/icecream/strawberry">Strawberry icecream</a>

<hr>
    
<a href="https://example.com/foo?bar=baz&src=mailing">Hello world</a>
<a href="https://example.com/cool?src=mailing">Cool!</a>
<a href="https://example.com/icecream/strawberry?src=mailing">Strawberry icecream</a>

我知道如何手动将查询参数添加到路由。 我知道如何定义 Blade 指令。

但是,我不知道如何将查询参数自动添加到解析的路由中。

【问题讨论】:

  • 你试过route('foo', ['bar'=&gt;'baz', 'src'=&gt;'mailing'])吗?
  • 不幸的是,这并不能解决我的问题。我想避免在route() 的所有调用中指定'src'=&gt;'mailing'
  • 好的。无论如何,你为什么要使用这种风格而不是 /../../.. 默认风格
  • 你不能替换里面的内容...你必须使用一个全局函数或类似的一个用户共享

标签: php laravel laravel-blade


【解决方案1】:

你可以使用这样的代码

@php
    $params = ['bar'=>'baz'];
    if (conditions) {
        $params['src'] = 'mailing';
    }
@endphp

<a href="{{ route('foo', $params) }}">Hello world</a>

【讨论】:

  • 是的......但不是真的。我修改了问题中的示例。希望现在更清楚了。
【解决方案2】:

一种方法是声明全局函数。创建一个php文件。我将在app/Helpers/GlobalFunction.php的路径中命名为GlobalFunction.php

<?php

if(!function_exists('queryParam')) {

    function queryParam($routeName,$params=[]){

        $params['src']="mailing";

        return route($routeName,$params);
    }
}

甚至像下面这样改进 queryParam 方法

    function queryParam($routeName,$params=[],$default=['src'=>'mailing']){
            
            return route($routeName,array_merge($params,$default));
   }

composer.json 自动加载文件

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files": ["app/Helpers/GlobalFunction.php"]
    },

然后运行composer dump-autoload

在你看来是这样

 <a href="{{ queryParam('foo',['bar'=>'baz','name'=>'john']) }}">Hello world</a>

【讨论】:

  • 我给你的答案+1,因为它有帮助。但我不喜欢用其他东西替换route() 的调用。理想情况下,route() 本身会被某种钩子捕获。
猜你喜欢
  • 2014-01-21
  • 2016-09-11
  • 1970-01-01
  • 2016-05-09
  • 2013-08-06
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2015-09-18
相关资源
最近更新 更多