我正在使用cakephp 3在多個圖像文件上傳中,我希望這些圖像可以按目錄路徑我的代碼和每個上傳的圖像應保存在數據庫(我正在使用MySQL數據庫)。如何在CakePHP 3:上傳多個圖像到服務器並使用cakephp保存每個圖像在數據庫中3
在我目前的版本中,我可以在我的表單中選擇多個圖像,幸運的是,在提交我的表單後,所有圖像都成功上傳到服務器圖像目錄路徑,正如我所預料的那樣,只有一個圖像被保存在數據庫中,因爲它應該將所有圖像和每個圖像保存在數據庫中。
。由此代碼在我ImageUploadController副本:
public function add()
{
$UploadedImage = array();
$uploadedImage = $this->UploadedImages->newEntity();
if ($this->request->is('post')) {
$images = array();
$images = $this->request->data['name'];
foreach ($images as $key => $image) {
if(!empty($image[$key].$image['name'])){
$fileName = $image[$key].$image['name'];
$uploadPath = WWW_ROOT.'img/press-releases/';
$uploadFile = $uploadPath.$fileName;
if(move_uploaded_file($image[$key].$image['tmp_name'],$uploadFile)){
$uploadedImage->name = $fileName;
$uploadedImage->image_dir = 'press-releases/';
$uploadedImage->status = $this->request->data['status'];
$this->UploadedImages->save($uploadedImage);
} else { $this->Flash->error(__('Unable to upload image, please try again.')); }
} else { $this->Flash->error(__('Please choose an image to upload.')); }
}//EOF FOREACH
}
$this->set(compact('uploadedImage'));
$this->set('_serialize', ['uploadedImage']);
}
這裏是我的簡單形式:add.ctp文件: simple multiple image upload form
這裏是我的模型表UploadImageTable:
class UploadedImagesTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('uploaded_images');
$this->setDisplayField('name');
$this->setPrimaryKey('id');
$this->addBehavior('Timestamp');
}
/**
* Default validation rules.
*
* @param \Cake\Validation\Validator $validator Validator instance.
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmpty('id', 'create');
$validator
->allowEmpty('name');
$validator
->allowEmpty('image_dir');
$validator
->boolean('status')
->allowEmpty('status');
return $validator;
}
}
我是一個相當新的CakePHP 3,所以你們所有人都知道一些關於這個上傳多個圖像和保存每個圖像在一個數據庫中,請給我一隻手或者其他什麼東西可以幫我解決這個問題,因爲這個東西有點困難。任何您的幫助將不勝感激。
有關更多附加詳細信息,此處添加了我的調試器SQL日誌的屏幕截圖。 In the image,I tried to upload 5 images
如果你能看到圖像,因爲我試圖上傳5張圖片;首先查詢它對我的表執行INSERT,然後下一個其他查詢是UPDATE,這應該是INSERT。我想知道爲什麼DML(數據操作語言)在這樣的查詢中突然改變。
更由於事先 瑪麗
感謝您的編輯建議..欣賞它。 – hotmarycorleone
你可以使用我的插件或只是看看它。它正在做你正在嘗試的東西,但在更高的抽象層次上爲應用程序中的所有內容提供文件存儲,而不僅僅是圖像。 https://github.com/burzum/cakephp-file-storage閱讀文檔並隨時向IRC或Slack頻道提問。我必須承認這可能不是* newbie友好的,因爲它使用CakePHP事件系統,如果您不熟悉SoC,DRY和設計模式,可能總體上不容易理解。 – burzum
您好burzum,我剛剛閱讀並試圖解決您的FileStorage插件一段時間,它的確很棒,但老實說,我認爲這需要我花些時間來理解它的工作原理,比如您的SoC的東西,新的cakephp,並仍在努力探索其核心。但我可以肯定地說,我會在其他時間使用你的。我非常感謝你的幫助。非常感謝。 – hotmarycorleone