PHP & Yii2: Комментарии с пагинацией за 30 минут

от автора


Введение

Yii2 — фреймворк для PHP, позволяющий рекордно быстро создать такие веб-сайты и компоненты веб-сайтов, как: блоги, комментарии, чаты, гостевые книги, а также прочие компоненты, где ключевую роль играют формы ввода (тэг input), списки и таблицы с пагинацией и, конечно же, база данных MySQL.

Советую уяснить сразу: Yii2 — это не CMS, это фреймворк. Поэтому он не содержит крупных готовых (весьма ущербно и криво реализованных) модулей, таких, как комментарии, гостевухи, корзины для интернет-магазинов и т.д. Вы создаете все это сами, имея при этом полную свободу действий, как и с «голыми» HTML&CSS&JS&PHP&MySQL. В то же время, на Yii2 все это делается гораздо легче, чем в «голом» варианте, потому что фреймворк содержит массу готовых элементов интерфейса и прочих фич.

Также, Yii2 поддерживает AJAX и местами содержит его готовую реализацию (впрочем, не очень удобную).

Давайте попробуем Yii2 Framework в деле, придумав какую-нибудь более-менее реалистичную задачу, для которой бы он подходил.

Задача

Реализуем простую страничку, содержащую:

  • Список комментариев, с пагинацией, но без иерархии (для простоты)
  • Форму публикации комментария с 3 полями input: Ник, E-mail и Текст комментария, с HTML5 Placeholders (для компактности интерфейса)
  • 2 обязательных к заполнению поля: Ник (по умолчанию «Анонимус») и Текст комментария; поле E-mail не обязательное, но валидируется на правильность формата введенного e-mail
  • Легкую и минималистичную тему Bootstrap (в Yii2 она входит по дефолту)
  • Не поддерживающую регистрацию и авторизации (для простоты)
  • Не поддерживающую AJAX для получения и постинга комментов (для простоты)

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

Требования к серверу для запуска Yii2

Yii2 требует PHP 5.4.0 или выше. Старые версии PHP (такие, как 5.2 или 5.3 в Денвере) не поддерживают некоторые синтаксические фичи, примененные в Yii2. Нам придется использоваться современный удаленный или локальный сервер, такой, как XAMPP, Ampps, Open Server и т.д.

Также, я рекомендую юзать Yii2 именно с БД MySQL, хотя он может выполняться вообще без запущенного сервера MySQL, а в качестве БД использовать, например, SQLite.

Качаем Yii2 и готовим его к работе

Yii2 представляет собой готовый шаблон веб-сайта («application template»), уже содержащий index.php и пару примеров страничек. Этот шаблон нужно скачать, загрузить на сервер и слегка настроить — и все, «скелет» нашего веб-сайта готов.

Качаем Yii2

Есть 2 способа скачать Yii2 — либо просто скачать его вручную браузером (в виде архива TGZ), либо примерно сделать то же самое, но через пакетный менеджер Composer.

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

1. Зайдем на http://www.yiiframework.com/download/

2. Прокрутим страницу до заголовка «Install from an Archive File».

3. Кликнем ссылку «Yii2 with basic application template».

Загружаем Yii2 на сервер

Откроем архив и распакуем папку «basic» (именно она нам нужна) в корень веб-сайта, куда обычно кладут index.php.

Если у вас XAMPP, то это папка «htdocs» в директории с XAMPP, в моем случае это C:\xampp\htdocs.

Если у вас Ampps, то это папка «www» в директории с Ampps, в моем случае это C:\Program Files (x86)\Ampps\www.

Если у вас удаленный сервер, то опять же ориентируйтесь по index.php, часто это папка «public_html». Скорее всего, для загрузки файлов на сервер придется использовать FTP-клиент, такой, как FileZilla или SmartFTP, т.к. обычно если на хостинге и есть на админка с файловым менеджером, то загрузку таких больших объемов файлов, да с многоуровневыми папками, он не поддерживает.

Готовим Yii2 к работе

В любом браузере пройдем по ссылке http://localhost/basic/web/ (если у вас удаленный сервер, то, естественно, вместо localhost нужно вставить имя своего хоста).

И ничего толком не увидим — Yii2 не заработает! Мы увидим стандартную Yii2шную страницу с сообщением об ошибке, с заголовком «Invalid Configuration — yii\base\InvalidConfigException» и содержанием "yii\web\Request::cookieValidationKey must be configured with a secret key."

Чтобы исправить это, мы должны зайти в папку "\basic\config\" и открыть файл «web.php» в текстовом редакторе, «независимом от символов переносов строк», таком, как Notepad++, но желательно не таком, как Блокнот Windows.

В этом файле увидим такой код:

<?php  $params = require(__DIR__ . '/params.php');  $config = [     'id' => 'basic',     'basePath' => dirname(__DIR__),     'bootstrap' => ['log'],     'components' => [         'request' => [             // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation             'cookieValidationKey' => '',         ], ... 

Перед нами многомерный массив в стиле PHP 5.4, похожий на JSON (вот для таких фич Yii2 и нужен PHP 5.4!), содержащий часть настроек нашего веб-сайта на Yii2, включая Cookie Validation Secret Key.

По соображениям безопасности, этот ключ должен быть уникальным для каждого Yii2. Вот почему он не задан «из коробки», и мы должны задать его сами.

Давайте возьмем генератор паролей (такой, как http://passwordsgenerator.net/) и сгенерируем длинный пароль с буквами и цифрами, вида UQQOLez78Gprpy3LvSUb79bDe) и зададим его свойству cookieValidationKey:

...     'components' => [         'request' => [             'cookieValidationKey' => 'UQQOLez78Gprpy3LvSUb79bDe',         ], ... 

Сохраним этот файл, и снова попробуем зайти на http://localhost/basic/web/

Ура! Все работает!

Таким образом, у нас есть простенький скелет веб-сайта с:

  • Главной страницей с lorem-ipsum-текстами (и парой интересных кнопочек)
  • Формой входа & базовой системой регистрации-входа с куками (но, к сожалению, логин-пароли «захардкожены», а не берутся из БД — надо «доработать напильником»)
  • Формой обратной связи, с капчой

Легкой и минималистичной темой Bootstrap Theme (по умолчанию в Yii2)

Чуть подправляем структуру каталогов

Очень, очень некрасиво, когда index.php лежит не в корне сайте. Давайте исправим это.

1. Зайдем в папку \basic\web\, выделим все ее содержимое (2 папки и 4 файла) и переместим его в корень.

2. Теперь, давайте откроем index.php в текстовом редакторе:

<?php  // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev');  require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');  $config = require(__DIR__ . '/../config/web.php');  (new yii\web\Application($config))->run(); 

Все «require»-пути относятся к папке «basic/web». Мы должны поменять их на абсолютные:

<?php  // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev');  require(__DIR__ . '/basic/vendor/autoload.php'); require(__DIR__ . '/basic/vendor/yiisoft/yii2/Yii.php');  $config = require(__DIR__ . '/basic/config/web.php');  (new yii\web\Application($config))->run(); 

3. Файл и "/index-test.php" папку "/basic/web/" просто удалим. Они нам просто не нужны.

Все. Теперь, зайдя на http://localhost/ или http://localhost/index.php, мы увидим наш сайт.

Примечаниe: рекомендуется также папку «basic» переименовать в «framework» (и исправить все пути в index.php). Если использовать Advanced Application Template (вместо Basic), то папка будет называться «advanced». Чтобы избежать путаницы, лучше применять универсальный вариант — «framework».

Строим сайт на Yii2

Если вы еще не забыли, мы собираемся строить Очень Простые Комментарии с Пагинацией на Yii2.

Этот процесс можно условно разделить на 5 этапов:

  1. Создаем пустую страницу на Yii2 (для комментариев)
  2. Готовим БД MySQL, создаем в ней 1 таблицу для хранения комментариев
  3. Настраиваем Yii2 для использования MySQL
  4. Строим форму публикацию комментария, и пишем код, добавляющий комментарий в БД
  5. Делаем пагинированный список на странице, и пишем код, читающий комментарии из БД и показывающий их в этом списке

Создаем пустую страницу на Yii2

Давайте взглянем на страницу About, точнее, на ее URL:

http://localhost/index.php?r=site%2Fabout

Очевидно, что это не обычная статическая страница. Это «виртуальная страница», которая динамически рендерится движком Yii2.

Как работает движок рендеринга в Yii2? А вот как.

  1. Мы заходим на страницу в браузере. По факту, мы делаем HTTP GET запрос к index.php с 1 параметром по имени «r» со значением «site%2Fabout» (или «site/about»).
  2. Движок рендеринга Yii2 (проинклюденный «require»-ами в index.php) получает это значение и парсит его по маске "*/*" на 2 части — "site" и "about".
  3. 3. Движок сканирует папку /basic/controllers/ (или /framework/controllers) на предмет файла по имени "SiteController.php" (with SiteController class).
  4. 4. Далее, рендерер сканирует этот класс на предмет метода по имени «actionAbout», и вызывает его.
  5. 5. Этот метод возвращает полный HTML-код страницы (с , хедерами и футерами), и рендерер возвращает его нам как результат GET-запроса.
  6. .

ссылка на оригинал статьи http://habrahabr.ru/post/267129/


Комментарии

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

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