我有一个表单来编辑一个作业,一个作业有一个状态列,可以是1,2或3
<?php echo $this->Form->input('status', array('label' => '', 'options' => $status)); ?>
当我提交表单时,我想检查状态值是否等于3,如果是,那么我想发送电子邮件。但是如果价值已经是3,我不想发送电子邮件。
在cakephp中有一种简单的方法可以检查新值的先前值等吗?
感谢。
答案 0 :(得分:2)
在保存新记录之前,先从数据库中读取现有记录。然后,您可以将新数据与之比较。
或者,将状态存储在会话中并将新数据与其进行比较。
因此,当您从数据库中读取记录时,请将状态保存在会话中:
$this->data = $this->Job->read(null, $id);
$this->Session->write('JobStatus.'.$this->data['Job']['id'], $this->data['Job']['status']);
编辑作业时,您可以检查旧值:
if (!empty($this->data)) {
if ($this->data['Job']['status'] == 3 && $this->Session->read('JobStatus.'.$this->data['Job']['id']) != 3) {
/**
* Send email
*/
}
}
答案 1 :(得分:2)
无需弄乱会话,或确实预先设置了值。
基本上,当您编辑记录时,您将从表中获取当前记录status
值。如果它已经是3,我们不想发送电子邮件,所以设置一个布尔值。
根据需要更新记录。
如果status
不是3,并且新状态为,请发送电子邮件。
我没有填写整个方法;但是你应该明白这个想法:
$send_email = true;
$current_status = $this->Job->field('status');
if($current_status==3) {
$send_email = false;
}
// save the record
if($send_email==true && $this->data['Job']['status']==3) {
//send the email
}
答案 2 :(得分:1)
您可以使用源值设置隐藏字段,并根据提交的值检查其值。
<?php echo $this->Form->input('old_status', array('type' => 'hidden', 'default' => $old_status)); ?>