このロジックは、厳密に言えば、コントローラにする必要があります。
ファイルと編集機能を備えた私のアプリでは、問題の画像のファイルフィールドとリンク/サムネイルを編集フォームに表示します。
私のアプローチは、私自身のアップローダーを使用していますので、あなたの結果は異なる場合がありますが、基本的に:
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を返します。 (あなたはエラーなどを返すことができましたが、これは私のアプローチでした)。
アップロードの呼び出し後、戻り値を確認し、ファイルが正常にアップロードされた場合は、モデルのフィールドを設定できます。 (私の場合はファイル名) - パスを保存することもできます。
偽の場合は、ファイルが存在しないことを意味します。私は配列から値を設定解除します。
フィールドが配列に存在しないため、ケーキは既存のデータを上書きしようとしません。単に無視するだけです。古い値をそのまま維持できます。