欢迎各位兄弟 发布技术文章
这里的技术是共享的
2019年4月7日
在某些情况下,我需要从应用程序的 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 答案,创建全局帮助文件的一种方法是遵循以下步骤。
helpers.php
在bootstrap
文件夹中创建一个文件(包含您的函数)。
添加到 composer.json
"autoload": {
"classmap": [
...
],
"psr-4": {
"App\\": "app/"
},
"files": [
"bootstrap/helpers.php"
]
}
运行composer dump-autoload
。
现在你的助手应该在你的应用程序中全局可用。
来自 https://chasingcode.dev/blog/laravel-global-url-helpers/