CakePHP 响应发送为空

问题描述 投票:0回答:1

我正在尝试在 CakePHP 2.5.3 中创建一些通用返回函数来标准化响应。我正在使用

Router::parseExtensions('json', 'xml');

protected function returnSuccess($data = null, $message = 'Success', $extraSerialize = array(), $statusCode = 200) {
    $this->set(array(
        'status' => true,
        'data' => $data,
        'message' => $message,
        '_serialize' => array_merge(array('status', 'data', 'message'), $extraSerialize)
    ));

    $this->response->statusCode($statusCode);
    $this->response->send();
    $this->_stop();
}


protected function returnError($data = null, $message = 'Error', $extraSerialize = array(), $statusCode = 400) {
    $this->set(array(
        'status' => false,
        'data' => $data,
        'message' => $message,
        '_serialize' => array_merge(array('status', 'data', 'message'), $extraSerialize)
    ));

    $this->response->statusCode($statusCode);
    $this->response->send();
    $this->_stop();
}

然而,响应始终是空的。如果我删除

$this->_stop();
就可以了。但是我希望停止请求(特别是在错误时)。

php cakephp response
1个回答
1
投票

您在视图渲染之前就中止了,所以这是预期的行为。

您的

CakeResponse::send()
调用实际上没有任何效果(除了可能发送的标头之外),这不会导致错误的唯一原因是因为当时回显的正文是空的,否则您会收到一个“ Cake 输出渲染数据时出现headers已经发送”错误。

就我个人而言,我可能会使用异常而不是手动发送/中止的东西,比如

if(!$abc) {
    throw new ForbiddenException();
}

// ...

或者简单的

return

if(!$abc) {
    return $this->returnError();
}

// ...

其中

returnError()
返回
$this->response
。两者都不需要调用
send()
_stop()

但是,当然也可以手动调用视图渲染

protected function returnError($data = null, $message = 'Error', $extraSerialize = array(), $statusCode = 400) {
    // ...

    $this->render();

    $this->response->statusCode($statusCode);
    $this->response->send();
    $this->_stop();
}

这样就可以为响应设置适当的主体。

另请参阅

© www.soinside.com 2019 - 2024. All rights reserved.