Yii2 зображення

376

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii. Дана стаття буде присвячена такій темі, як Yii2 зображення. Тут ми подивимося, як відбувається завантаження і висновок завантажених зображень.

Отже, давайте розглянемо в даному циклі статей питання завантаження картинок. Операція, яка необхідна практично на будь-якому сайті: завантаження зображень товару в інтернет-магазині або прикріплення картинки поста в блозі і т. д.

Зробити це насправді відносно просто. Нам потрібно знати, що для роботи з завантаженим файлом необхідно звернутися до класу yii\web\UploadedFile, об’єкт якого і містить всю інформацію про завантаженому файлі.

Давайте почнемо з створення моделі, яка буде здійснювати валідацію завантаженого файлу (адже нам потрібен не будь-який файл, а саме зображення) і зберігати його в обрану папку. Нехай наша модель називається UploadImage.

‘png, jpg’],
];
}
public function upload(){
if($this->validate()){
var_dump($this->image);
}else{
return false;
}
}
}

Yii2 зображення

Як бачимо, в моделі ми вказали властивість $image, яке і буде відповідати за роботу із завантаженим зображенням. У методі rules використані правила валідації для одержуваного файлу, якими ми повідомляємо, що по-перше, поле форми input повинно бути коректним завантаженим файлом, а по-друге, розширення цього файлу повинні бути png або jpg.

Ну і, нарешті, у нас є заготівля методу upload, який буде перевіряти, чи пройдена валідація, і поки що просто роздруковувати на екран вміст обеъекта.

Далі нам, звичайно ж, знадобиться контролер і подання. Давайте в класі SiteController створимо дію actionUpload, в якому і отримаємо об’єкт моделі.

public function actionUpload(){
$model = new UploadImage();
if(Yii::$app->request->isPost){
$model->image = UploadedFile::getInstance($model, ‘image’);
$model->upload();
return;
}
return $this->render(‘upload’, [‘model’ => $model]);
}

Yii2 зображення

У екшені ми створюємо об’єкт моделі і властивість $image зберігаємо інформацію про завантаженому файлі. Також ми викликаємо метод upload() моделі, який написали на попередньому кроці. Тепер створимо нескладний вид — upload.php та звернемося до шуканої сторінці з формою (http://yii2/site/upload):

field($model, ‘image’)->fileInput() ?>
Завантажити

Yii2 зображення

Зверніть увагу! Ми використовуємо останню версію фреймворка. До версії 2.0.8 для форми при завантаженні файлів обов’язково потрібно було додавати атрибут enctype зі значенням multipart/form-data, ось таким чином:

[‘enctype’ => ‘multipart/form-data’]]) ?>

Тепер цього робити не обов’язково, Yii сам додасть необхідний атрибут, якщо у формі є поле типу file.

Ну що ж, давайте спробуємо завантажити файл через створену форму. Якщо ми ніде не помилилися, тоді метод upload моделі роздрукує дані завантаженого зображення.

Yii2 зображення

До речі, якщо це буде не картинка з дозволеними розширеннями, тоді ми повинні побачити іншу картину:

Yii2 зображення

Тепер Давайте внесемо необхідні правки в коді, щоб завантажити і вивести його. Для початку метод upload моделі.

public function upload(){
if($this->validate()){
$this->image->saveAs(“uploads/{$this->image->baseName}.{$this->image->extension}”);
}else{
return false;
}
}

Тут ми використовували метод saveAs, який збереже файл з вказаним шляхом. Ми будемо зберігати зображення в папку uploads (створіть папку в директорії web).

Тепер контролер. Ми хочемо не тільки завантажити картинку, але і реалізувати її виведення на екран (на практиці, звичайно ж, нам потрібно зберегти шлях до картинки в БД, але це тема окремої статті).

public function actionUpload(){
$model = new UploadImage();
if(Yii::$app->request->isPost){
$model->image = UploadedFile::getInstance($model, ‘image’);
$model->upload();
return $this->render(‘upload’, [‘model’ => $model]);
}
return $this->render(‘upload’, [‘model’ => $model]);
}

Ну і подання. Давайте перевіримо наявність зображення і додамо його висновок перед формою:

image): ?>
Yii2 зображення

В результаті зображення повинно бути завантажено і успішно виведено відразу після збереження в папку web\uploads.

Yii2 зображення

Як бачимо, завантаження і виведення зображень в Yii — досить проста річ. Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.