En este capítulo veremos como realizar una subida múltiple de archivos, para ello crearemos un formulario activo (ActiveForm) que contendrá un input file multiple, este formulario estará conectado a un modelo de validación, desde el cual estableceremos los siguientes parámetros ...
- La subida de algún archivo es requerida
- El archivo no podrá tener un tamaño mayor de 1 MB
- El archivo no podrá tener un tamaño menor de 10 Bytes
- El archivo deberá tener una de las siguientes extensiones pdf, doc y txt
- El máximo de archivos que se pueden subir son 4.
Para la validación del campo input file utilizaremos la siguiente documentación ...
yii\validators\FileValidator: www.yiiframework.com/doc-2.0/yii-validators-filevalidator.html
Para la subida de archivos utilizaremos la clase ...
yii\web\UploadedFile: www.yiiframework.com/doc-2.0/yii-web-uploadedfile.html
1 - Activar en el archivo php.ini la extensión php_fileinfo.dll
2 - Crear la vista upload.php donde se encuentra el formulario con el campo input file ...
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?= $msg ?>
<h3>Subir archivos</h3>
<?php $form = ActiveForm::begin([
"method" => "post",
"enableClientValidation" => true,
"options" => ["enctype" => "multipart/form-data"],
]);
?>
<?= $form->field($model, "file[]")->fileInput(['multiple' => true]) ?>
<?= Html::submitButton("Subir", ["class" => "btn btn-primary"]) ?>
<?php $form->end() ?>
3 - Crear el modelo de validación FormUpload.php
<?php
namespace app\models;
use yii\base\model;
class FormUpload extends model{
public $file;
public function rules()
{
return [
['file', 'file',
'skipOnEmpty' => false,
'uploadRequired' => 'No has seleccionado ningún archivo', //Error
'maxSize' => 1024*1024*1, //1 MB
'tooBig' => 'El tamaño máximo permitido es 1MB', //Error
'minSize' => 10, //10 Bytes
'tooSmall' => 'El tamaño mínimo permitido son 10 BYTES', //Error
'extensions' => 'pdf, txt, doc',
'wrongExtension' => 'El archivo {file} no contiene una extensión permitida {extensions}', //Error
'maxFiles' => 4,
'tooMany' => 'El máximo de archivos permitidos son {limit}', //Error
],
];
}
public function attributeLabels()
{
return [
'file' => 'Seleccionar archivos:',
];
}
}
4 - Agregar las clases FormUpload y UploadedFile al controlador ...
use app\models\FormUpload; use yii\web\UploadedFile;
5 - Crear la acción Upload en el controlador
public function actionUpload()
{
$model = new FormUpload;
$msg = null;
if ($model->load(Yii::$app->request->post()))
{
$model->file = UploadedFile::getInstances($model, 'file');
if ($model->file && $model->validate()) {
foreach ($model->file as $file) {
$file->saveAs('archivos/' . $file->baseName . '.' . $file->extension);
$msg = "<p><strong class='label label-info'>Enhorabuena, subida realizada con éxito</strong></p>";
}
}
}
return $this->render("upload", ["model" => $model, "msg" => $msg]);
}
6 - Crear la carpeta archivos en la carpeta web, en esta carpeta se guardarán los archivos subidos por el usuario ...
Ver el vídeo tutorial de Yii Framework 2 en Youtube
No hay comentarios:
Publicar un comentario