отправлять электронную почту при отправке формы только после изменения поля - PullRequest
0 голосов
/ 24 ноября 2011

У меня есть форма для редактирования работы, работа имеет столбец состояния, который может быть 1, 2 или 3

<?php echo $this->Form->input('status', array('label' => '', 'options' => $status)); ?>

Когда я отправляю форму, я хочу проверить, является ли значение статусаравно 3, если это так, я хочу отправить письмо.НО я не хочу отправлять электронное письмо, если значение уже было 3.

Есть ли в cakephp простой способ проверить предыдущее значение на новое значение и т. Д.?

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

Нет необходимости связываться с сессиями или даже устанавливать значение заранее.

В основном, когда вы редактируете запись, вы получаете значение текущей записи 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 голосов
/ 24 ноября 2011
  1. Считайте существующую запись из базы данных непосредственно перед сохранением новой.Затем у вас будет что-то для сравнения новых данных.

  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 голос
/ 24 ноября 2011

Вы можете установить скрытое поле с исходным значением и сравнить его с представленным.

<?php echo $this->Form->input('old_status', array('type' => 'hidden', 'default' => $old_status)); ?>
...