#php: #yii #framework 2 – #upload y registro en bd de fotos

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

Anuncios

Incluir en PHP un archivo programado en otro lenguaje

¿Cuando queremos incluir un archivo PHP en nuestra página PHP usamos el include, ¿peró que pasa si lo que necesitamos incluir es el resultado de un archivo programado en otro lenguaje (ASP, PERL…) en nuestra página PHP?

Si lo hicieramos con un include lo único que conseguiriamos seria mostrar el código fuente de dicho archivo en nuestra página ya que el servidor lo interpretaria como un archivo de texto simple al no reconocer la extensión.

pagina.asp:

response.write "Hola, soy una página ASP"

pagina.php:

echo "Llamo a ASP desde PHP";
include ("pagina.asp");

Mostraria en pantalla:
Llamo a ASP desde PHP

response.write "Hola, soy una página ASP"

Para que se muestre el resultado de la ejecución de la página ASP (o cualquier otra página interpretada) lo que haremos es usar el file_get_contents de la siguiente manera:

echo "Llamo a ASP desde PHP";
echo file_get_contents("http://www.dominio.com/pagina.asp");

Y obtendriamos:

Llamo a ASP desde PHP
Hola, soy una página ASP

Es necesario poner siempre la ruta absoluta de la página

Autor: Xavier Bernadí i Millan
http://www.webtaller.com/construccion/lenguajes/php/lecciones/incluir-php-archivo-programado-otro-lenguaje.php