【问题标题】:cakephp: no save, no validate errors, no callbacks, empty sql logcakephp:没有保存,没有验证错误,没有回调,空的 sql 日志
【发布时间】:2013-07-13 01:59:52
【问题描述】:

在我的控制器中,我有这个添加功能:

public function add(){
    $this->layout = false;
    if($this->request->is('post')){
        $this->Paciente->create(); 
        $this->Paciente->set($this->request->data);
        if ($this->Paciente->validates()) {
            if($this->Paciente->save()){
                 $this->set('status', '200');
            } else {
             //   debug($this->Paciente->validationErrors);
             //   ini_set('memory_limit', '-1');
         //       var_dump($this->Paciente);

                $this->set('status', '101');
            //    $log = $this->Paciente->getDataSource()->getLog(false, false);
          //      debug($log);

               // die;
             }
        } else {
            // didn't validate logic
   //         $errors = $this->Paciente->validationErrors;
     //       debug($errors);
            $this->set('status', '100');

        }

    } else

     $this->set('status', '404');

}

我正在发送帖子信息,状态始终为 101。如您所见,我已经尝试了很多来找出错误所在,但没有运气。

我的模型中也没有任何回调(beforeSave、afterSave...)...

有人知道发生了什么吗?

【问题讨论】:

  • 您禁用了布局。你需要吗?只需尝试删除该行并尝试。
  • 您的调试级别是 2 吗?日志是怎么说的?
  • 我建议您简单地调试 save 方法并确定它返回 false 的位置 - 基于它应该更清楚您的模型如何验证但不保存。

标签: cakephp model save


【解决方案1】:

你的

if ($this->Paciente->validates()) {
        if($this->Paciente->save()) {
}

错了。 您正在验证两次。

请 - 如文档所述 - 要么使用 false (save(null, false)) 以不使两次无效,要么在此处删除 validates() 部分。 你可以直接这样做:

if ($this->Paciente->save($this->request->data)) {}

不过,这本身不太可能导致您的问题。 或者您是否有一些自定义验证规则在第二次(和错误)触发器时会使字段无效? 您可以稍后通过检查$this->Paciente->validationErrors 来确认。它应该是空的。如果它没有保存(并且肯定没有回调),并且它没有由于 SQL 错误而引发异常,那么它很可能是您的验证规则。

【讨论】:

  • 虽然调用 validate your before save 是不必要的 - 删除对 validates 的调用不会改变调用 save 的行为 - 它不会解决问题中的问题。 -1
  • 它可能,如果有回调在播放。哪个-从问题看来-并非如此。所以不,这确实不太可能是问题本身,但它仍然需要指出 - 并且使代码本身复杂化/膨胀。 AppModel 中可能有一些回调?在某些时候,必须在保存之前返回 false 才能遇到 101 情况。
【解决方案2】:

问题在于我发送帖子信息的方式:

我将变量设置为 data['Model']['var'] 正确的方法是 data[Model][var]

感谢@mark、@AD7six、@liyakat 和@Alex 为解决问题提供的帮助。

【讨论】:

    【解决方案3】:

    我无法想象。当您像上面那样设置数组值时,它可能会在 php5.3 中中断>

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多