Php 如何使用Yii framework 2.0上载多个文件
使用Yii framework 2.0时,我希望能够上载多个文件。在Yii 2之后,在Php 如何使用Yii framework 2.0上载多个文件,php,file-upload,yii2,Php,File Upload,Yii2,使用Yii framework 2.0时,我希望能够上载多个文件。在Yii 2之后,在小节下上载多个文件我有以下模型 class Newsletter extends \yii\db\ActiveRecord { public $attachment_file; public function rules() { return [ [['attachment_file'], 'file', 'maxFiles' =>
小节下上载多个文件
我有以下模型
class Newsletter extends \yii\db\ActiveRecord {
public $attachment_file;
public function rules()
{
return [
[['attachment_file'], 'file', 'maxFiles' => 5],
];
}
public function upload() {
if ($this->validate()) {
foreach ($this->attachment_file as $file) {
echo '<pre>'; print_r($file); echo '</pre>';
}
return true;
} else {
return false;
}
}
}
使用上面的所有代码,我希望可以使用一个输入文件元素选择多个文件。但这和我所期望的不一样。当我用一个相同的输入文件元素选择多个文件并点击Submit时,我只看到最后选择的文件。所以我开始怀疑我在做什么。我做错什么了吗?或者我是否需要多次添加输入文件元素,一个输入文件元素对应一个上载文件?请参阅我尝试的内容:
视图代码
use yii\web\UploadedFile;
use app\models\MultipleUploadForm;
use app\models\ProductImage;
.......
function actionUploadImage() {
$form = new MultipleUploadForm();
if (Yii::$app->request->isPost) {
$form->files = UploadedFile::getInstances($form, 'files');
if ($form->files && $form->validate()) {
foreach ($form->files as $file) {
$image = new ProductImage();
if ($image->save()) {
$file->saveAs($image->getPath());
}
}
}
}
return $this->render('uploadImage', [
'uploadForm' => $form,
]);
}
多平台模型
这个代码对我有用。希望这也适用于您。我已经尝试了您的代码。首先,我注意到,当我点击ChooseFiles按钮并多次选择一个文件时,我只看到最后选择的文件。其次,我在控制器的foreach循环中回显$file变量,当我点击Upload按钮时,我只看到最后一个选定文件的一个yii\web\UploadedFile对象。请告诉我什么时候上传多个文件。或者我需要多次添加输入文件吗?我在项目中使用的代码已完成。请尝试调试表单post数据。
if (Yii::$app->request->isPost) {
$model->attachment_file = UploadedFile::getInstances($model, 'attachment_file');
if ($model->upload()) {
die();
// file is uploaded successfully
return;
}
}
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($uploadForm, 'files[]')->fileInput(['multiple' => true]) ?>
<button class="btn btn-primary">Upload</button>
<?php ActiveForm::end() ?>
use yii\web\UploadedFile;
use app\models\MultipleUploadForm;
use app\models\ProductImage;
.......
function actionUploadImage() {
$form = new MultipleUploadForm();
if (Yii::$app->request->isPost) {
$form->files = UploadedFile::getInstances($form, 'files');
if ($form->files && $form->validate()) {
foreach ($form->files as $file) {
$image = new ProductImage();
if ($image->save()) {
$file->saveAs($image->getPath());
}
}
}
}
return $this->render('uploadImage', [
'uploadForm' => $form,
]);
}
use yii\base\Model;
use yii\web\UploadedFile;
class MultipleUploadForm extends Model
{
/**
* @var UploadedFile[] files uploaded
*/
public $files;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['files'], 'file', 'extensions' => 'jpg', 'mimeTypes' => 'image/jpeg', 'maxFiles' => 10, 'skipOnEmpty' => false],
];
}
}