如果用户未输入值,如何从 HTTP GET 请求中排除查询变量?

How do I exclude a query variable from a HTTP GET request if the user hasn't inputted a value?

我正在向外部 API 发送 GET 请求,如果用户在所有适用字段中输入值,该请求将正常工作。我希望所有这些字段都是可选的,当然第一个字段除外,以确保我们得到响应。

我可以使用一种简单的方法来忽略请求中的这些吗?

这些是我将传递到请求中的变量

$query = $request->input('query');
    $include = $request->input('include');
    $include2 = $request->input('include2');
    $include3 = $request->input('include3');
    $exclude = $request->input('exclude');
    $exclude2 = $request->input('exclude2');

这个请求从整体上看可能有些混乱,但其实很简单。用户可以输入基本成分作为查询,并通过输入要包含或排除的特定成分进一步细化他们的食谱搜索。我想知道如果用户只输入了两种包含的成分和一种排除的成分,如何传递这个请求

$res = $client->get('http://api.yummly.com/v1/api/recipes?_app_id='MY_ID'&_app_key='MY_KEY'&q='.$query.'&allowedIngredient[]='.$include.'&allowedIngredient[]='.$include2.'&allowedIngredient[]='.$include3.'&excludedIngredient[]='.$exclude.'&excludedIngredient[]='.$exclude2.'&maxResult=50', ['auth' =>  ['user', 'pass']]);
        $body = json_decode($res->getBody(), TRUE);

非常感谢您对此提供的任何帮助。

更新答案

$res = 'http://api.yummly.com/v1/api/recipes?_app_id=MY_ID&_app_key=MY_KEY&q='.$query;

        if($include) {
        $res .= '&allowedIngredient[]='.$include;
        }

        if($include2) {
         $res .= '&allowedIngredient[]='.$include2;
        }

        if($include3) {
         $res .= '&allowedIngredient[]='.$include3;
        }

        if($exclude) {
         $res .= '&excludedIngredient[]='.$exclude;
        }

        if($exclude2) {
         $res .= '&excludedIngredient[]='.$exclude2;
        }

        $res .='&requirePictures=true&maxResult=50';
        $result = $client->get($res , ['auth' =>  ['user', 'pass']]);
        $body = json_decode($result->getBody(), TRUE);

最简单的方法是检查有效值。

$apiUrl = 'http://api.yummly.com/v1/api/recipes?_app_id='MY_ID'&_app_key='MY_KEY'&q='.$query;

if($include) {
    $apiUrl .= '&allowedIngredient[]='.$include;
}

if($include2) {
    $apiUrl .= '&allowedIngredient[]='.$include2;
}

// Etc for all vars

您也可以通过构建数组然后将其内爆来实现,但这会非常混乱,因为键需要“$allowedIngredient[]”,因此您可以调查该路线。