什么';s Laravel用查询字符串构建外部URL的最佳方法


What's Laravel best way to build an external URL with query string?

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

我可以给出的一个类似的例子是静态图像的外部URL谷歌地图api:

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/query扩展,而且有很多函数在内部这样做。我就是找不到最好的地方给自己"插上插头"。

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

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

但我并不是百分之百地认为这是你真正想要的,所以如果我错了,请道歉。

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

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

简单字符串连接:

$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';

您正在搜索此函数:http://php.net/manual/en/function.http-build-query.php