Yii2 модели. Часть 1

Yii2 модели

От автора: приветствую вас, друзья. В этой статье мы продолжим изучение фреймворка Yii и познакомимся с понятием Yii2 модели. Они, как вы помните, являются еще одним компонентом паттерна MVC и отвечают за работу с данными. Продолжим?

Итак, в предыдущих статьях мы с вами разобрали понятия контроллера и вида. Мы создали свой первый контроллер TestController с двумя действиями, создали виды для этих страниц и даже передали некоторые значения из контроллера в вид. Однако, эти значения фактически были статичными, т.е. мы их определили в контроллере. К тому же, этих значений было не так много.

На практике же мы работаем с большими объемами данных, которые чаще всего хранятся в базе данных. Вот здесь нам и пригодится третий компонент паттерна MVC — модель. Работа с БД — это пожалуй, основное назначение моделей. Все файлы данного компонента хранятся в папке models.

Yii2 модели

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

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

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

Узнать подробнее

Для начала нам потребуется БД и таблица в ней. Создадим тестовую БД (я назову ее yii2_mini) и в ней одну таблицу для статей (назову ее post).

CREATE TABLE IF NOT EXISTS `post` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `category_id` int(10) unsigned NOT NULL,
  `title` varchar(255) NOT NULL,
  `excerpt` varchar(255) NOT NULL,
  `text` text NOT NULL,
  `keywords` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `created` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

Заполните таблицу любыми тестовыми данными. Ее структура, полагаю, понятна:

id — ID статьи;

category_id — ссылка на категорию (которой принадлежит статья) будущей таблицу категорий;

title — название статьи;

excerpt — цитата статьи (часть текста статьи для списка статей);

text — полный текст статьи;

keywords — ключевые слова;

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

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

Узнать подробнее

description — мета-описание;

created — дата создания статьи.

В принципе, стандартная таблица, ничего особенного. Теперь создадим модель для работы с этой таблицей. При создании стоит запомнить одно правило — в Yii их принято именовать по имени таблицы, в этом случае модель автоматически будет работать с одноименной таблицей. Итак, класс мы назовем Post:

namespace app\models;

use yii\db\ActiveRecord;

class Post extends ActiveRecord
{

}

Yii2 модели

Нашу модель мы наследовали от класса yii\db\ActiveRecord, который предоставляет нам удобный набор методов для работы с БД. Идем дальше. Коль мы хоти работать со статьями, тогда логично было бы создать соответствующий контроллер, чтобы не работать в тестовом. Давайте создадим контроллер Post.

namespace app\controllers;

use yii\web\Controller;

class PostController extends Controller
{

 public function actionIndex(){
 return $this->render('index');
 }
 
}

Ну и, конечно же, необходимый вид — \views\post\index.php. В файле конфигурации — \config\web.php — изменим дефолтный маршрут, чтобы на главной странице показывался именно будущий список статей.

'defaultRoute' => 'post/index',

Если вы нигде не ошиблись, тогда на главной странице должны увидеть результат работы именно контроллера Post.

Yii2 модели

Хорошо. А как теперь обратиться к БД и получить все статьи из таблицы post? Очевидно, для этого контроллер должен обратиться к модели и ее методам, которые позволят получить нужные данные. Сделать это можно, к примеру, таким образом:

namespace app\controllers;

use yii\web\Controller;
use app\models\Post;

class PostController extends Controller
{

 public function actionIndex(){
 $posts = Post::find()->all();
 return $this->render('index', compact('posts'));
 }

}

Как видим, мы обратились к классу по его имени — Post, и обратились к некоторым его методам. Фактически данная запись — Post::find()->all() — построит следующий запрос: SELECT * FROM post. Полученные в переменную $posts данные мы отдаем в вид \post\index.php. Но перед тем, как работать с данными в виде, давайте попробуем сейчас обновить страницу.

Yii2 модели

Упс! Мы получили ошибку о неизвестной базе yii2basic. Все правильно, ведь мы пока что не настроили подключение к созданной ранее БД. Давайте исправим это. Для этого откроем еще один файл конфигурации — \config\db.php — и в нем пропишем необходимые настройки подключения.

return [
 'class' => 'yii\db\Connection',
 'dsn' => 'mysql:host=localhost;dbname=yii2_mini',
 'username' => 'root',
 'password' => '',
 'charset' => 'utf8',
];

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