У меня есть модель, где мне нужно выполнить некоторую обработку перед сохранением (или в некоторых случаях с редактированием), но обычно не при редактировании. Фактически, если я делаю обработку большинства изменений, результирующее поле будет неправильным. Прямо сейчас, я работаю в обратном вызове beforeSave модели. Как я могу узнать, пришел ли я из редактирования или добавил?
Фрэнк ЛюкКак я могу узнать, есть ли я в beforeSave из редактирования или создания? CakePHP
Ответ 1
function beforeSave() {
if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}
Ответ 2
Это в основном то же самое, что и ответ Neilcrookes, за исключением того, что я использую empty()
в качестве теста, в отличие от !isset()
.
Если ключ массива существует, но пуст, то! isset вернет false, а пустой вернет true.
Мне нравится использовать тот же файл вида для добавления и редактирования, чтобы сохранить мой код DRY, а это значит, что при добавлении записи ключ "id" по-прежнему будет установлен, но ничего не будет содержать. Торт обрабатывает этот штраф, кроме версии neilcrookes кода не будет распознавать его как добавление, так как ключ primaryKey устанавливается в массиве данных (хотя он ничего не содержит). Итак, изменение! Isset для пустых учетных записей для этого случая.
function beforeSave() {
if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
// insert
} else {
// edit
}
return true;
}