使用CloudRail设置category属性时触发Unknown category错误求助
getNearbyPOIs的Unknown Category错误 你的问题核心是传入的category值不符合CloudRail库对Google Places(以及其他同类服务)的参数要求,从而触发了IllegalArgumentError。下面一步步分析并解决问题:
1. 问题根源:Category参数需要用预定义枚举值
CloudRail的getNearbyPOIs方法对categories参数有严格要求——必须传入对应服务类下的预定义枚举常量,而不是自定义的字符串(比如你用的'restaurant'就不属于合法取值)。
以Google Places为例,你需要使用\CloudRail\Service\GooglePlaces\Category类下的常量,常见的有效值包括:
\CloudRail\Service\GooglePlaces\Category::RESTAURANT\CloudRail\Service\GooglePlaces\Category::CAFE\CloudRail\Service\GooglePlaces\Category::BAR
同理,Foursquare、Yelp等服务也有各自对应的Category枚举类,比如\CloudRail\Service\Foursquare\Category。
2. 修改代码的具体方案
把你传入的['restaurant']替换成对应的枚举常量数组,修改后的调用代码如下:
// 先引入Google Places的Category类 use CloudRail\Service\GooglePlaces\Category; $cr_service = load_cloudrail_service('GooglePlaces'); // 使用枚举常量作为category参数 $retrievedPOIs = $cr_service->getNearbyPOIs(50.45594, 30.465612, 40000, '', [Category::RESTAURANT]);
如果切换到其他服务(比如Foursquare),只需替换对应的Category类即可:
use CloudRail\Service\Foursquare\Category; $retrievedPOIs = $cr_service->getNearbyPOIs(50.45594, 30.465612, 40000, '', [Category::FOOD]);
3. 额外验证:参数顺序是否正确
再确认下getNearbyPOIs的参数顺序是否匹配CloudRail的方法定义:
该方法标准参数顺序为:getNearbyPOIs(float $latitude, float $longitude, int $radius, string $language, array $categories)
你的代码里第四个参数传空字符串(语言参数)、第五个传categories,这个顺序是正确的,所以无需调整。
为什么不设置category时正常?
当categories参数为空(或不传)时,CloudRail会跳过类别校验,直接返回所有类型的POI,因此不会触发非法参数错误。
内容的提问来源于stack exchange,提问作者Yurii Kosiak

