欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel 添加和删除 URL 查询参数助手 有大用

Laravel 添加和删除 URL 查询参数助手

2019年4月7日

凯尔·格伦 ( Kyle Glenn)Unsplash上的照片

问题

在某些情况下,我需要从应用程序的 URL 中删除一个或多个查询参数,然后返回新的 URL。同样,我希望能够轻松添加新参数。此外,在我的Laravel 5.8应用程序中,我想从代码中的任何位置(包括Blade模板)调用这些帮助程序。

这种类型的场景在通过各种(URL)参数过滤(或分面)数据时非常常见。

解决方案

我制作了这两个函数来做到这一点。请注意,这些是 Laravel 特定的(由于使用了内置url()帮助程序),但它们可以很容易地适应与框架无关。

删除参数

/**
 * URL before:
 * https://example.com/orders/123?order=ABC009&status=shipped
 *
 * 1. remove_query_params(['status'])
 * 2. remove_query_params(['status', 'order'])
 *
 * URL after:
 * 1. https://example.com/orders/123?order=ABC009
 * 2. https://example.com/orders/123
 */
function remove_query_params(array $params = [])
{
    $url = url()->current(); // get the base URL - everything to the left of the "?"
    $query = request()->query(); // get the query parameters (what follows the "?")

    foreach($params as $param) {
        unset($query[$param]); // loop through the array of parameters we wish to remove and unset the parameter from the query array
    }

    return $query ? $url . '?' . http_build_query($query) : $url; // rebuild the URL with the remaining parameters, don't append the "?" if there aren't any query parameters left
}

添加参数

/**
 * URL before:
 * https://example.com/orders/123?order=ABC009
 *
 * 1. add_query_params(['status' => 'shipped'])
 * 2. add_query_params(['status' => 'shipped', 'coupon' => 'CCC2019'])
 *
 * URL after:
 * 1. https://example.com/orders/123?order=ABC009&status=shipped
 * 2. https://example.com/orders/123?order=ABC009&status=shipped&coupon=CCC2019
 */
function add_query_params(array $params = [])
{
    $query = array_merge(
        request()->query(),
        $params
    ); // merge the existing query parameters with the ones we want to add

    return url()->current() . '?' . http_build_query($query); // rebuild the URL with the new parameters array
}

转换为全局助手

对于我的特定用例,我需要能够从控制器(或其他类)或直接在 Blade 模板中使用这些函数。尽管有些人讨厌全局函数的想法,但 Laravel 经常使用这种模式,它确实让构建功能和完成工作变得更加容易。

基于此StackOverflow 答案,创建全局帮助文件的一种方法是遵循以下步骤。

  1. helpers.phpbootstrap文件夹中创建一个文件(包含您的函数)

  2. 添加到 composer.json

    "autoload": {
        "classmap": [
            ...
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "bootstrap/helpers.php"
        ]
    }
  3. 运行composer dump-autoload

现在你的助手应该在你的应用程序中全局可用。

来自 https://chasingcode.dev/blog/laravel-global-url-helpers/


普通分类: