【问题标题】:What to do when Cake doesn't say what is wrong?当Cake不说什么是错的时候怎么办?
【发布时间】:2013-10-02 04:01:00
【问题描述】:

当模型没有保存或返回任何类型的错误时怎么办?

$data = array(
    'Model' => array(
        'field1' => 'value1',
        'field2' => 'value2',
    )
);

try {
    // Forget to add this
    $this->Model->set($data);

    if (!$this->Model->validates()) { // Returns true
        throw new GenericErrorException("Can't validate");
    }

    $this->Model->create();
    if (!$this->Model->save($data)) { // Returns false
        debug($this->Model->invalidFields()); // Empty array
        debug($this->Model->getDatasource()->getLog()); // Returns array without INSERT/UPDATE

        throw new GenericErrorException("Can't save");
    }
} catch(Exception $e) {
    // LOG ERROR
}

我可以做些什么来验证发生了什么错误?

【问题讨论】:

  • 在模型上设置任何数据之前拥有if (!$this->Model->validates()) { 是没有意义的。您是否有一个返回 false 并停止保存操作的 beforeSave 回调?有什么行为吗? $this->Model->validationErrors;的值呢
  • 你没有正确使用 CakePHP,所以它不能告诉你哪里出了问题。
  • @tigrang 我忘记添加代码了,但是在验证之前已经设置了数据,对不起。
  • @tigrang 编辑代码。我的错。

标签: php cakephp cakephp-2.0 cakephp-2.1 cakephp-model


【解决方案1】:

我不确定你在做什么。您应该将数据保存为 POSTPUT 请求的结果:

public function add() {
    if ($this->request->is('post')) {
        if ($this->Model->save($this->request->data)) {
            // model saved; set flash message and redirect
        }
        else {
            // save failed; errors in $this->Model->validationErrors
        }
    }
}

如果您遵循 CakePHP 的约定,您将获得更流畅的体验。在您的模型上调用 save() 也会在保存之前尝试验证您的数据,因此无需手动验证。

【讨论】:

  • 嘿,$data 代表发布的数据。我在保存之前进行验证,因为除了抛出异常之外我还有一些逻辑。
  • 这个逻辑在哪里?在你的模型中?你能证明这个逻辑吗?因为这可能有助于我们更好地理解问题。
  • 这个逻辑无关紧要,因为validates()返回true,所以,所有逻辑都被忽略了。
  • 如果问题出在哪里,那会有所帮助。因此,没有,我们无能为力。我唯一能建议的就是检查你的错误日志,你应该已经这样做了。
【解决方案2】:

添加 $this->Model->validationErrors; 总是有用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多