Zend framework ZF2 JSON-RPC-错误响应,数据参数,如何访问?

Zend framework ZF2 JSON-RPC-错误响应,数据参数,如何访问?,zend-framework,zend-framework2,json-rpc,Zend Framework,Zend Framework2,Json Rpc,假设我有一个RPC调用来添加颜色。用户只能添加一次颜色。如果他们第二次添加一个,我想返回一个错误响应,告诉他们他们搞砸了,以及为什么 JSON-RPC错误响应描述了包含数据参数空间的。在这里,似乎应该包含“已添加颜色”的错误代码。但是,我不知道如何在响应中返回这个 $jsonRpc = new Server(); $jsonRpc->setClass(new Testi()); $jsonRpc->getRequest()->setVersion(Server::VERSION

假设我有一个RPC调用来添加颜色。用户只能添加一次颜色。如果他们第二次添加一个,我想返回一个错误响应,告诉他们他们搞砸了,以及为什么

JSON-RPC错误响应描述了包含数据参数空间的。在这里,似乎应该包含“已添加颜色”的错误代码。但是,我不知道如何在响应中返回这个

$jsonRpc = new Server();
$jsonRpc->setClass(new Testi());
$jsonRpc->getRequest()->setVersion(Server::VERSION_2);

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    echo $jsonRpc->getServiceMap()->setEnvelope(Smd::ENV_JSONRPC_2);
}
else {
    $jsonRpc->handle();
}


class Testi {

    const ERROR_CODE_COLOR_EXISTS = 5;

    private $colors = ['red', 'green'];

    /**
     * @param $color
     * @return array
     */
    public function addColor($color) {
        if (in_array($color, $this->colors)) {
            throw new \Exception('Color exists');
        }
        else {
            $this->colors[] = $color;
        }

        return $this->colors;
    }
}
在返回错误响应的程度上,这是可行的,但我没有选择包含错误代码(self::error\u code\u COLOR\u存在)

如何将信息放入该数据参数

谢谢,
亚当发现你有两个选择:

1) 向异常添加参数:

$e = new Exception('I pooped my pants');
$e->color = 'brown';
$->smell = 'bad';
然后,颜色和气味将出现在错误响应的数据参数中

2) 将服务器(在我的代码中,$jsonRpc)传递到对象中(在我的代码中,它看起来像:newtesti($jsonRpc)),并使用fault(…)方法,该方法允许将数据数组/对象传递到其中

后一种方法为您提供了更大的灵活性,因为您可以执行数据->代码,数据->消息,这两种方法都不能在$e对象上设置,因为它们是现有的受保护参数。但是,然后将模型耦合到$jsonRpc服务器,这是不好的

尽管如此,这并不是应对上述情景的正确方式。错误响应或多或少是为真实的、不可恢复的服务器错误保留的,类似于真实的异常,而不是用户验证错误。在我的例子中,最好定义一种响应类型,允许我使用适当的响应代码返回成功/失败值。{成功:错误,代码:5}

干杯, 亚当

$e = new Exception('I pooped my pants');
$e->color = 'brown';
$->smell = 'bad';