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