這個邏輯應該在控制器,嚴格地說。
在我的具有文件和編輯功能的應用程序中,我將在編輯表單上顯示文件字段以及相關圖像的鏈接/縮略圖。
我的方法是使用我自己的上傳,因此您的結果可能會有所不同,但本質:
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。 (你可能會返回錯誤等,但這是我的方法)。
上傳調用後,我檢查返回值,如果文件上傳成功,我可以在我的模型中設置字段。 (文件名,在我的情況下) - 例如,您也可能想要存儲路徑。
如果它是假的 - 這意味着沒有文件;所以我取消了數組中的值。
因爲字段不存在於數組中,cake不會嘗試覆蓋現有數據 - 它只是忽略它;讓舊價值保持不變。