Строго говоря, эта логика должна присутствовать в контроллере.
В моих приложениях с файлами и возможностями редактирования я покажу в форме редактирования поле файла и ссылку / миниатюру нужного изображения.
мой подход использует мой собственный загрузчик, поэтому ваши результаты могут отличаться, но по существу:
if (!empty($this->data)) {
$file_object = $this->data['Listing']['featured_image'];
$image_data=$this->Upload->do_upload($file_object, 'img/uploads/');
if($image_data){
$this->data['Listing']['featured_image'] = $image_data['name'];
} else {
unset($this->data['Listing']['featured_image']);
}
$this->Listing->save($this->data)
и в моем компоненте загрузки у меня есть это:
public function do_upload($file_object, $location='img/uploads/') {
/**
* No file was uploaded
*/
if($file_object['error']==4) {
return false;
}
// carry on uploading
Так по существу;Я передаю свой компонент загрузки $file_object
, который взят из формы.Затем я делаю простой тест, используя набор кодов ошибок по умолчанию, чтобы проверить, пуст ли файл (4).Если он пуст, я возвращаю false.(вы могли возвращать ошибки и т. д., но это был мой подход).
после вызова загрузки я проверяю возвращаемое значение, и если файл был успешно загружен, я могу установить поле в моей модели.(имя файла, в моем случае) - вы также можете сохранить путь, например.
Если это false - это значит, что файла не было;поэтому я сбрасываю значение из массива.
Поскольку поле не существует в массиве, торт не будет пытаться перезаписать существующие данные - он просто их игнорирует;оставляя старое значение без изменений.