Это в основном то же самое, что и ответ 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;
}