0

基于此处的信息:使用带有 Exception.renderer 的自定义渲染器来处理应用程序异常

我正在创建一个以 XML 格式呈现的自定义错误渲染器。

下面是 app/Lib/Error/AppExceptionRenderer 中渲染函数的示例代码:

public function render() {
    if (isset($this->controller->request->params['xml'])) {
        $this->controller->viewClass = "MyXml";
        $error = array(
            'app' => array(
                'error' => 'An unexpected error has occured.'
            )
        );
        $this->controller->set('error', $error);
        $this->controller->set('_serialize', 'error');
    }
}

然而,没有任何回报。我在这种if情况下做了一些回声,这表明了。

那么是不是因为 viewClass 在 AppExceptionRenderer::render() 阶段没有初始化?

也没有错误。
“MyXml” viewClass 在普通控制器中也能完美运行。

4

1 回答 1

1

所以显然我错过了渲染和发送方法。
这是完整的工作示例。

<?php
class AppExceptionRenderer extends ExceptionRenderer {

    public function __construct($exception) {
            parent::__construct($exception);
    }

    public function render() {

        // Handle errors
        if (isset($this->controller->request->params['xml'])) {
            Cakelog::error($this->error->getMessage());
            $this->controller->viewClass = "MyXml";
            $error = array(
                'app' => array(
                    'error' => 'An illegal operation has been detected.'
                )
            );
            $this->controller->set('error', $error);
            $this->controller->set('_serialize', 'error');
            $cakeResponseObject = $this->controller->render();
            $this->controller->response->send($cakeResponseObject);
        } else {
            if ($this->method) {
                call_user_func_array(array($this, $this->method), array($this->error));
            }
        }
    }
}
于 2013-05-29T02:05:03.910 回答