Cakephp 覆盖模型验证错误

Cakephp 覆盖模型验证错误,cakephp,Cakephp,我是CakePHP新手 我想使用模型验证机制,但覆盖显示的错误时遇到问题。我正在构建一个API,其中所有视图都需要以JSON呈现,并且我有一个JSON格式,所有错误都需要以JSON格式输出。我已经定义了一个自定义AppError类,并且我已经成功地以这种格式定义了自定义错误 是否有方法使用AppError类覆盖来自验证的错误消息的输出 谢谢。据我所知,没有直接的方法可以从AppError类中获取验证错误。解决方法是在app/app_model.php中创建一个AppModel类,并使用onErr

我是CakePHP新手

我想使用模型验证机制,但覆盖显示的错误时遇到问题。我正在构建一个API,其中所有视图都需要以JSON呈现,并且我有一个JSON格式,所有错误都需要以JSON格式输出。我已经定义了一个自定义AppError类,并且我已经成功地以这种格式定义了自定义错误

是否有方法使用AppError类覆盖来自验证的错误消息的输出


谢谢。

据我所知,没有直接的方法可以从AppError类中获取验证错误。解决方法是在app/app_model.php中创建一个AppModel类,并使用onError()回调方法将错误传递给AppError类

// app/app_model.php
class AppModel extends Model {

    public function onError() {
        // Pass the errors to your AppError class
        AppError::someErrorMethod($this->getErrors());
    }

}

通过将以下方法添加到AppModel类中,我找到了一个解决方案:

function validates($options = array()) {
    $result = parent::validates($options);
    if (!$result) {
        $this->_validateErrors();
    }

    return $result;
}

function _validateErrors() {
    foreach ($this->validationErrors as $code) {
            $this->cakeError('apiError', array('code' => $code)); // Custom JSON error.
            return;
    }
}

然后,在控制器中调用Model::save()之前,我手动调用$this->Model->validates()。这似乎效果很好。

我的情况下无法实现这一点。查看我现在使用的解决方案的答案,但我不确定是否有更好的方法。