От автора: приветствую вас, друзья. В этой статье мы продолжим изучение фреймворка Yii и познакомимся с понятием Yii2 модели. Они, как вы помните, являются еще одним компонентом паттерна MVC и отвечают за работу с данными. Продолжим?
Итак, в предыдущих статьях мы с вами разобрали понятия контроллера и вида. Мы создали свой первый контроллер TestController с двумя действиями, создали виды для этих страниц и даже передали некоторые значения из контроллера в вид. Однако, эти значения фактически были статичными, т.е. мы их определили в контроллере. К тому же, этих значений было не так много.
На практике же мы работаем с большими объемами данных, которые чаще всего хранятся в базе данных. Вот здесь нам и пригодится третий компонент паттерна MVC — модель. Работа с БД — это пожалуй, основное назначение моделей. Все файлы данного компонента хранятся в папке models.
По умолчанию здесь уже хранится несколько моделей для работы тестового приложения. Давайте начнем создание своей модели, которая будет работать со статьями сайта. Допустим, мы создаем блог и на главной странице должны выводиться статьи.
Для начала нам потребуется БД и таблица в ней. Создадим тестовую БД (я назову ее yii2_mini) и в ней одну таблицу для статей (назову ее post).
1 2 3 4 5 6 7 8 9 10 11 |
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 — ключевые слова;
description — мета-описание;
created — дата создания статьи.
В принципе, стандартная таблица, ничего особенного. Теперь создадим модель для работы с этой таблицей. При создании стоит запомнить одно правило — в Yii их принято именовать по имени таблицы, в этом случае модель автоматически будет работать с одноименной таблицей. Итак, класс мы назовем Post:
1 2 3 4 5 6 7 8 |
namespace app\models; use yii\db\ActiveRecord; class Post extends ActiveRecord { } |
Нашу модель мы наследовали от класса yii\db\ActiveRecord, который предоставляет нам удобный набор методов для работы с БД. Идем дальше. Коль мы хоти работать со статьями, тогда логично было бы создать соответствующий контроллер, чтобы не работать в тестовом. Давайте создадим контроллер Post.
1 2 3 4 5 6 7 8 9 10 11 12 |
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 — изменим дефолтный маршрут, чтобы на главной странице показывался именно будущий список статей.
1 |
'defaultRoute' => 'post/index', |
Если вы нигде не ошиблись, тогда на главной странице должны увидеть результат работы именно контроллера Post.
Хорошо. А как теперь обратиться к БД и получить все статьи из таблицы post? Очевидно, для этого контроллер должен обратиться к модели и ее методам, которые позволят получить нужные данные. Сделать это можно, к примеру, таким образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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. Но перед тем, как работать с данными в виде, давайте попробуем сейчас обновить страницу.
Упс! Мы получили ошибку о неизвестной базе yii2basic. Все правильно, ведь мы пока что не настроили подключение к созданной ранее БД. Давайте исправим это. Для этого откроем еще один файл конфигурации — \config\db.php — и в нем пропишем необходимые настройки подключения.
1 2 3 4 5 6 7 |
return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2_mini', 'username' => 'root', 'password' => '', 'charset' => 'utf8', ]; |
Теперь можно попробовать еще раз обновить страницу в браузере, если все сделано верно, тогда прежней ошибки уже быть не должно. В следующей статье мы продолжим работу с моделями и данными, которые они нам предоставляют. А на сегодня у меня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков.
Комментарии (4)