Yii2 изображения

Yii2 изображения

От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii. Данная статья будет посвящена такой теме, как Yii2 изображения. Здесь мы посмотрим, как происходит загрузка и вывод загруженных изображений.

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

Сделать это на самом деле относительно просто. Нам нужно всего-то знать, что для работы с загруженным файлом необходимо обратиться к классу yii\web\UploadedFile, объект которого и содержит всю информацию о загруженном файле.

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

<?php

namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

class UploadImage extends Model{

 public $image;

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

 public function upload(){
 if($this->validate()){
 var_dump($this->image);
 }else{
 return false;
 }
 }

}

Yii2 изображения

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка 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):

<?php
use yii\widgets\ActiveForm;
?>

<?php $form = ActiveForm::begin() ?>
<?= $form->field($model, 'image')->fileInput() ?>
<button>Загрузить</button>
<?php ActiveForm::end() ?>

Yii2 изображения

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

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее
<?php $form = ActiveForm::begin(['options' => ['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]);
}

Ну и представление. Давайте проверим наличие изображения и добавим его вывод перед формой:

<?php if($model->image): ?>
 <img src="/uploads/<?= $model->image?>" alt="">
<?php endif; ?>

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

Yii2 изображения

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

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Фреймворк YII2: теория и первая практика

Овладейте азами фреймворка Yii2 за 5 дней!

Получить

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree