Как я могу узнать, нахожусь ли я перед сохранением после редактирования или создания? CakePHP - PullRequest
11 голосов
/ 17 ноября 2009

У меня есть модель, в которой мне нужно выполнить некоторую обработку перед сохранением (или в некоторых случаях с редактированием), но обычно не при простом редактировании. Фактически, если я выполню обработку большинства правок, полученное поле будет неправильным. Сейчас я работаю в обратном вызове модели beforeSave. Как я могу узнать, пришел ли я из редактирования или добавить?

Фрэнк Люк

Ответы [ 2 ]

19 голосов
/ 18 ноября 2009
function beforeSave() {
  if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}
9 голосов
/ 05 июня 2013

Это в основном то же самое, что и ответ neilcrookes, за исключением того, что я использую empty() в качестве теста, в отличие от !isset().

Если ключ массива существует, но пуст, то! Isset вернет false, тогда как empty вернет true.

Мне нравится использовать один и тот же файл представления для добавления и редактирования, чтобы мой код оставался СУХИМ. Это означает, что при добавлении записи ключ 'id' все равно будет установлен, но ничего не будет содержать. Cake справляется с этим нормально, за исключением того, что neilcrookes версия кода не распознает его как добавление, поскольку ключ primaryKey установлен в массиве данных (даже если он ничего не содержит). Таким образом, изменение! Isset для очистки только учетных записей для этого случая.

function beforeSave() {
  if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}
...