0

我尝试创建一个编辑视图,允许用户编辑名为 ABC 的模型的条目。一旦用户打开某一行的编辑掩码,它就应该锁定该行。我在数据库中有一个名为 'locked' 的 tinyint(1) 值来执行此操作。这是代码的一部分。它发生在 saveField 方法上,我已经检查过了。这很奇怪,因为正确记录上的值发生了变化!但不知何故,它试图两次执行相同的任务,我不知道为什么。

function edit($id = null) {

    // select the 
    $this->ABC->id = $id;
    $session = $this->Session->read();


    $this->set('locked',false);


    // save or read the data
    if (empty($this->data)) {
        $this->data = $this->ABC->read();

        // locking
        if ($this->data["ABC"]["locked"] == true) {
            $this->set('usercanedit', false);
            $this->set('locked', true);
        } else {
            $this->ABC->saveField('locked', true);
        }
   }
 }

当我用这个替换 saveField 代码时(这当然是愚蠢的,只是为了测试)它可以工作。这以某种方式证明了编辑方法被调用了两次。一次没有参数,或者参数错误..

if($this->ABC->id == 13)
  $this->ABC->saveField('locked', true);

有人有想法吗?

4

1 回答 1

1

尝试在 saveField 调用之前设置 id,就像书中说的那样:

在调用 saveField() 之前设置模型的 ID ($this->ModelName->id = $id)。

在你的情况下:

} else {
    $this->ABC->id = $id; // ID should be set right before the saveField call
    $this->ABC->saveField('locked', true);
}
于 2012-04-25T19:27:37.057 回答