【问题标题】:What's Laravel best way to build an external URL with query string?Laravel 用查询字符串构建外部 URL 的最佳方法是什么?
【发布时间】:2023-03-16 05:50:02
【问题描述】:

我目前正在使用 Laravel 构建一个项目,我需要使用查询字符串构建 URL。 URL:: 函数和 url()、action() 等是不可能的,因为它们主要是为内部使用而构建的。我需要创建的 url 是外部的。

我可以举一个类似的例子是静态图像 Google Maps api 的外部 URL:

https://maps.googleapis.com/maps/api/staticmap?center=New+York,NY&zoom=13&size=600x300&key=KEY

如果你有数组:

<!-- language: lang-php -->
array(
    'center'=>'New York, NY',
    'zoom'=>13,
    'size'=>'600x300'
)

我主要是问这个问题,因为我目前无法安装 http_build_url / 查询扩展,并且因为有很多函数可以在内部执行此操作。我只是找不到最好的地方来“插入”自己。

【问题讨论】:

    标签: php url laravel


    【解决方案1】:

    如果您需要重新发明轮子(这很糟糕,很抱歉),您可以这样做。

    $queryString = '';
    $arrayLength = count($myArray);
    foreach ($myArray as $key => $val) {
        $queryString .= urlencode($key) . '=' . urlencode($val);
        $arrayLength--;
        if ($arrayLength) {
            $queryString .= '&';
        }
    }
    

    我会将它保存为一个函数,并有一个单独的函数来构造 url,例如

    function buildUrl($baseUri, $params) {
        return sprintf("%s?%s", $baseUri, buildQueryString($params));
    }
    

    但我不是 100% 认为这是你真正想要的,如果我错了,请道歉。

    编辑:四年后,鉴于他们要求提供 Laravel 方法,我会这样做:

    collect($array)->map(function ($value, $key) {
        return urlencode($key) . '=' . urlencode($value);
    })->join('&');
    

    【讨论】:

    • 正是我需要的!我真的很想通过使用 Laravel 的本机函数来尽可能地优化,但那可以。非常感谢!
    【解决方案2】:

    简单的字符串连接:

    $myStr = 'puppies.';
    echo 'Dogs have '.$myStr;
    

    输出:

    狗有小狗。

    您可以以相同的方式将数组的元素与 url 字符串连接起来:

    $values = Array(
                    'center'=>'New York, NY',
                    'zoom'=>13,
                    'size'=>'600x300'
                     )
    
    $urlTemp = 'https://maps.googleapis.com/maps/api/staticmapcenter=';
    
    $url     =  $urlTemp.$values['center']
               .'&zoom='.$values['zoom']
               .'&size='.$values['size']
               .'&key=KEY';
    

    【讨论】:

    • 感谢您的回答。我想避免这种情况,以尽可能多地使用 Laravel 原生函数,但这可能是目前更好的解决方案之一。
    • 哦,我误解了您所说的其他功能“不可能”的意思。好的,抱歉,我不能提供更多帮助。
    【解决方案3】:

    【讨论】:

    • 你没看错,但问题明确指出他不能使用那个功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多