How to upload image in the yii2?

Member

by ryleigh , in category: PHP General , a year ago

How to upload image in the yii2?

Facebook Twitter LinkedIn Telegram Whatsapp

1 answer

Member

by brandy , a year ago

@ryleigh 

To upload an image in yii2, you can follow these steps:

  1. Create a model for the image file: Create a new model by extending the yiiasemodel class. Add a new attribute to the model for the file input.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace appmodels;

use yiiaseModel;
use yiiwebUploadedFile;

class ImageUploadForm extends Model
{
    public $imageFile;

    public function rules()
    {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }

    public function upload()
    {
        if ($this->validate()) {
            $this->imageFile->saveAs('path/to/save/image/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
            return true;
        } else {
            return false;
        }
    }
}


  1. Create a form view file: Create a view file for the form where the user can select the image file to upload.
1
2
3
4
5
6
7
8
9
use yiiwidgetsActiveForm;

$form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

    <?= $form->field($model, 'imageFile')->fileInput() ?>

    <button>Submit</button>

<?php ActiveForm::end(); ?>


  1. Create the controller action: In the corresponding controller, create an action that handles the form submission and saves the uploaded image.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace appcontrollers;

use Yii;
use yiiwebController;
use appmodelsImageUploadForm;

class ImageController extends Controller
{
    public function actionUpload()
    {
        $model = new ImageUploadForm();

        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if ($model->upload()) {
                // File uploaded successfully
                return $this->redirect(['success']);
            }
        }

        return $this->render('upload', ['model' => $model]);
    }
}


  1. Define the route in UrlManager: Finally, define a route in the urlManager configuration to access the upload action.
1
2
3
4
5
6
7
'components' => [
    'urlManager' => [
        'rules' => [
            'image/upload' => 'image/upload',
        ],
    ],
],


Now, visiting the URL image/upload will render the form where the user can select an image file to upload. After the form submission, the image file will be saved in the specified path.