buenas
en español no encuentro mucho material sobre yiiframework2 y el que encuentro esta incompleto porque solo hacen upload y no registran en base de datos o estan redactados para programadores avanzados que no necesitan leer tutoriales para hacer las cosas … vamos al turron
Esto está programado sobr eun ejemplo sencillo, una tabla que se llama ejemplos con un campo nombre y otro «imagen» que es donde guardaremos ruta y nombre de archivo
- creamos la vista upload.php en la carpeta views y dentro en este caso en la carpeta ejemplos y le metemos este codigo:
<?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() ?>
- creamos el modelo de validación FormUpload.php en la carpeta models y le metemos este codigo:
<?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' => 'jpg',
'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:',
];
}
}
- agregamos las clases FormUpload y UploadedFile al controlador, en este caso el nuestro es controllers/EjemplosController.php:
use app\models\FormUpload;
use yii\web\UploadedFile;
- y creamos la acción Upload en el controlador controllers/EjemplosController.php:
public function actionUpload($id)
{
$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) {
if ($file->saveAs('archivos/' . $file->baseName . '.' . $file->extension)){
$msg = "
<strong class='label label-info'>Enhorabuena, subida realizada con éxito</strong>
";
$modele = $this->findModel($id);
$modele->imagen=$file->baseName . '.' . $file->extension;
$modele->save();
}
}
}
}
return $this->render("upload", ["model" => $model, "msg" => $msg]);
}
con esto ya tenemos la subida de archivos desde el panel de control, ahora solo tenemos que modificar la vista de cada registro para ver la foto de marras
- en views/ejemplos/view.php añadimos esta linea al final para poder ver la foto relacionada con cada registro del a base de datos : <?= Html::img(Url::base().’/archivos/’.$model->imagen,[‘height’=>’200px’]);?> y añadimos esta otra donde tenemos los botones update y delete para poder llamar al formulario de subida de imagenes <?= Html::a(Yii::t(‘app’, ‘Upload’), [‘upload’, ‘id’ => $model->id], [‘class’ => ‘btn btn-primary’]) ?>
y si no he bebido mucho vino creo que no me olvido de nada
espero que esto le sirva de ayuda a alguien mas aparte de a mi mismo xDD