我正在向外部API发送GET请求,如果用户在所有适用的字段中输入值,该API将正常工作。我希望所有这些字段都是可选的,当然除了第一个确保我们得到回复之外。
我可以使用一种简单的方法来忽略请求中的这些吗?
这些是我将传递给请求的变量
$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);
非常感谢您提供任何帮助。
UPDATE应答
$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);
答案 0 :(得分:1)
最简单的方法是检查有效值。
$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 []'所以你会调查那条路线。