yii2 file input kartik widget

ejecutar este par de sentencias:
composer require kartik-v/bootstrap-fileinput "@dev"
composer require kartik-v/yii2-widget-fileinput "@dev"

la idea es poder guardar  una imagen en una carpeta del sitio:

nuestro modelo tiene una campo que guarda solo el nombre del archivo: $image_name

vamos a crear un campo virtual llamado $image que hace referencia al archivo de imagen que se envia desde el formulario:

class Notifications extends \yii\db\ActiveRecord
{

    var $image;




para usarlo en una vista:

use kartik\file\FileInput;

<?= $form->field($model, 'image')->widget(FileInput::classname(), [
              'options' => ['accept' => 'image/*'],
               'pluginOptions'=>['allowedFileExtensions'=>['jpg','gif','png'],'showUpload' => false,],
          ]);   ?>

en el controller:

use yii\web\UploadedFile;

public function actionCreate() {
        $model = new Notifications ();
      
        if ($model->load ( Yii::$app->request->post () )) {
            $image = UploadedFile::getInstance ( $model, 'image' );
            if (!is_null( $image )) {
                $model->full_image_url = $image->name;
                $ext = end ( (explode ( ".", $image->name )) );
                // generate a unique file name to prevent duplicate filenames
                $model->full_image_url = Yii::$app->security->generateRandomString () . ".{$ext}";
                // the path to save file, you can set an uploadPath
                $uploadPath = Yii::$app->basePath . '/upload-folder/';
                $path = $uploadPath. $model->image_name;
                $image->saveAs ( $path );
            }
            if ($model->save ()) {
                return $this->redirect ( [
                        'view',
                        'id' => $model->id
                ] );
            }
        }

fuente:
https://github.com/kartik-v/yii2-widget-fileinput


No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable