我正在使用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