Введение
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 этапов:
- Создаем пустую страницу на Yii2 (для комментариев)
- Готовим БД MySQL, создаем в ней 1 таблицу для хранения комментариев
- Настраиваем Yii2 для использования MySQL
- Строим форму публикацию комментария, и пишем код, добавляющий комментарий в БД
- Делаем пагинированный список на странице, и пишем код, читающий комментарии из БД и показывающий их в этом списке
Создаем пустую страницу на Yii2
Давайте взглянем на страницу About, точнее, на ее URL:
http://localhost/index.php?r=site%2Fabout
Очевидно, что это не обычная статическая страница. Это «виртуальная страница», которая динамически рендерится движком Yii2.
Как работает движок рендеринга в Yii2? А вот как.
- Мы заходим на страницу в браузере. По факту, мы делаем HTTP GET запрос к index.php с 1 параметром по имени «r» со значением «site%2Fabout» (или «site/about»).
- Движок рендеринга Yii2 (проинклюденный «require»-ами в index.php) получает это значение и парсит его по маске "*/*" на 2 части — "site" и "about".
- 3. Движок сканирует папку /basic/controllers/ (или /framework/controllers) на предмет файла по имени "SiteController.php" (with SiteController class).
- 4. Далее, рендерер сканирует этот класс на предмет метода по имени «actionAbout», и вызывает его.
- 5. Этот метод возвращает полный HTML-код страницы (с , хедерами и футерами), и рендерер возвращает его нам как результат GET-запроса.
.
ссылка на оригинал статьи http://habrahabr.ru/post/267129/
Добавить комментарий