我正在更新REST Api类;在每种方法的最后,我必须调用DoResponse
方法以将作为第一个参数传递的数据转换为JSON字符串。
作为要求的一部分,我为每个端点创建了响应对象。所有这些对象都实现\JSONSerializable
class CustomResponseObject implements JsonSerializable {
public function jsonSerialize() {
return [/*...*/];
}
}
然后我在Api方法中实例化那些对象,并将其传递给DoResponse
函数。
function myApiEndpoint() {
$res = new CustomResponseObject();
/*...*/
return $this->DoResponse($res);
}
问题是,所述方法仅接受数组作为第一个参数。
public function DoResponse(array $response = array());
我可以通过传递$res->jsonSerialize()
来解决此问题,但是有一种方法可以在我将对象传递给DoResponse
函数时自动对其进行jsonSerialize,而无需更改底层方法?
答案 0 :(得分:-1)
最后,我们决定采用的解决方案是更改签名和DoResponse()
方法的前几行,如下所示:
public function DoResponse($response = array()) {
if($response instanceof JsonSerializable) {
$response = $response->jsonSerialize();
}
if(is_array($response) === false) {
// Error handling
}
// Previous function body.
}
没有什么令人兴奋的事情,但是目前看来,没有办法使该过程完全自动化。