Фреймворк yii2 от теории к практике создания сайта
Yii – это высокопроизводительный компонентный PHP фреймворк, предназначенный для быстрой разработки современных веб-приложений. Слово Yii (произносится как Йи [ji:] ) в китайском языке означает «простой и эволюционирующий». Также Yii может расшифровываться как акроним Yes It Is!
Yii – это универсальный фреймворк и может быть задействован во всех типах веб-приложений. Благодаря его компонентной структуре и отличной поддержке кэширования, фреймворк особенно подходит для разработки таких крупных проектов, как порталы, форумы, CMS, магазины или RESTful-приложения.
Если вы уже знакомы с другими фреймворками, вам наверняка будет интересно сравнить их с Yii.
- Как и многие другие PHP фреймворки, для организации кода Yii использует архитектурный паттерн MVC (Model-View-Controller).
- Yii придерживается философии простого и элегантного кода, не пытаясь усложнять дизайн только ради следования каким-либо шаблонам проектирования.
- Yii является full-stack фреймворком и включает в себя проверенные и хорошо зарекомендовавшие себя возможности, такие как ActiveRecord для реляционных и NoSQL баз данных, поддержку REST API, многоуровневое кэширование и другие.
- Yii отлично расширяем. Вы можете настроить или заменить практически любую часть основного кода. Используя архитектуру расширений, легко делиться кодом или использовать код сообщества.
- Одна из главных целей Yii – производительность.
Yii — не проект одного человека. Он поддерживается и развивается сильной командой и большим сообществом разработчиков, которые ей помогают. Авторы фреймворка следят за тенденциями веб-разработки и развитием других проектов. Наиболее подходящие возможности и лучшие практики регулярно внедряются в фреймворк в виде простых и элегантных интерфейсов.
На данный момент существует две основные ветки Yii: 1.1 и 2.0. Ветка 1.1 является предыдущим поколением и находится в состоянии поддержки. Версия 2.0 – это полностью переписанный Yii, использующий последние технологии и протоколы, такие как Composer, PSR, пространства имен, трейты и многое другое. 2.0 — текущее поколение фреймворка. На этой версии будут сосредоточены основные усилия несколько следующих лет. Данное руководство именно о версии 2.0.
Yii 2.0 требует PHP 5.4.0 и выше и наилучшим образом работает на последней версии PHP 7. Чтобы узнать требования для отдельных возможностей, вы можете запустить скрипт проверки требований, который поставляется с каждым релизом фреймворка.
Для разработки на Yii потребуется общее понимание ООП, так как фреймворк полностью следует этой парадигме. Также стоит изучить такие современные возможности PHP как пространства имён и трейты. Понимание этих концепций позволит вам более легко освоиться c Yii 2.0.
Установка YII2
Документация
Вы можете найти подробную инструкцию здесь, я же пробегусь по простой и типичной для Mac OS X установке и настройки среды. У фреймоврка есть подробная документация и описание классов, которое содержит все детали о YII.
От переводчика. Я в свою очередь не имею под рукой яблочного девайса и буду проделывать все действия под Ubuntu (запущенной под VMWare Player).
Установка Composer
Для комфортного использования фреймворка рекомендуется использовать популярный менеджер расширений PHP – Composer. Если он у вас еще не установлен проделайте следующее:
Установка YII2
Теперь используем Composer для установки YII2. Для установки требуется аккаунт на GitHub, если у вас его нет – зарегистрируйтесь.
Давайте назовем наш первый проект «hello»:
YII2 поддерживает два типа приложений для разработки: простые и продвинутые. Для данного урока мы будем использовать простое приложение, оно устанавливается по умолчанию. Шаблон продвинутого приложения поддерживает front-end, back-end и консоль, так же как WordPress, это административная панель и задачи для cron.
Установка и настройка локальной среды разработки
Я использую бесплатное ПО MAMP for OS X с открытым исходным кодом, для разработки. Убедитесь, что MAMP запущен и его web сервер и сервер базы данных запущены. Затем создайте символьную ссылку на директорию с сайтом:
Теперь, если вы настроили все верно, то открыв localhost:8888/hello/web вы увидите простой шаблон приложения YII2 с Bootstrap 3.x.
Эта страница удивит разработчиков, ранее разрабатывающих на YII 1.1, где не был предустановлен Bootstrap последней версии, который прочно занял свое место в сети.
YII архитектура приложения
Одна из ключевых особенностей фреймворка – поддержка паттерна MVC. Это позволяет создавать более структурированный код, который проще понимать, упрощает многие вещи, которые реализуются с трудом на PHP, такие как безопасность и автоматическая кодогенерация. Также это способствует поддержке и повторному использованию кода.
В приложении YII весь трафик направляется на один файл /web/index.php. Этот файл загружает YII, зависимости, а затем запускает наше приложение.
По умолчанию это Index метод в файле /controllers/SiteController.php
Как правило, в контроллерах много методов, но с минимальным количеством кода. Контроллеры управляют доступом, загружают модели и представления. Основная смысловая нагрузка должна лежать на моделях, а представления лишь отображают шаблоны.
По умолчанию YII отображает /views/layouts/main.php в качестве представления для /views/site/index.php. main.php поддерживает html и css структуру страницы с тулбаром и контентом. Внутри main.php происходит вызов содержимого:
Переменная $content будет заменена кодом сгенерированным в /views/site/index.php, который представляет статичную html страницу.
Пишем приложение «Привет мир!»
Включаем красивые URL-адреса
В начале давайте включим красивые адреса при помощи mod_rewrite. Если на домашней странице вы кликнете по кнопке about то увидите адрес подобный этому: localhost:8888/hello/web/index.php?r=site%2Fabout. Мы же сейчас его приведем к такому виду localhost:8888/hello/web/site/about.
В директории config хранятся настройки всей вашей среды: настройки веб приложения, консольного приложения и настройки баз данных. Изменим файл /config/web.php следующим образом:
Затем необходимо создать в директории /web, где хранится наш index.php, файл .htaccsess, со следующим содержимым:
Убедитесь, что в MAMP включен mod_rewrite, если же возникли проблемы посмотрите ветку на stackoverflow.
В вашем браузере перейдите по адресу localhost:8888/hello/web/site/about, теперь там вы должны увидеть страницу About простого приложения YII.
Создаем экшн
Эта функция будет искать параметр target в адресе url для его вывода на экран. В случае его отсутствия выведется просто «World». В фреймворке YII экшены реализованы как методы с префиксом actionИмяЭкшена. В класссе SiteController мы использовали public function actionSay для создания экшена Say.
Стандартным поведением метода render является поиск файла в views/ControllerID/ViewName.php поэтому давайте создадим в /views/site/ файл say.php:
Этот шаблон выведет строку «Hello +$(target)», где $(target) — переменная переданная в url. Для обеспечения безопасности она попадает не на прямую в строку, а в начале проверяется на вредоносный код.
Если вы теперь посетите localhost:8888/hello/web/site/say?target=Tuts%20Readers, то увидите следующее:
Это простой пример реализации MVC модели фреймворка. Более детально вы можете ознакомиться с данным примером на сайте фреймворка в официальной документации.
А теперь давайте зальем наше приложение на GitHub и запустим на продакшн-сервере.
Настройка вашей удаленной среды
Простое приложение YII должно запускаться на серверах Apache и Nginx «из коробки», я буду приводить инструкции по запуску на Apache, про Nginx вы сможете найти здесь.
Создаем репозиторий на GitHub
Теперь войдите удаленно по ssh на ваш сервер при помощи IP или доменного имени
Обновите кофигурацию, установите Git, включите mod_rewrite для Apache и mcrypt для PHP.
Настройка доступа удаленного сервера к GitHub
Теперь мы настроим pull запросы с GitHub. Вначале установите Git
Теперь мы создадим группу для www, добавим данные и GitHub пользователей и настроим их права:
Теперь создадим ключ для синхронизации с репозиторием:
Если все правильно сконфигурированно то вы увидите:
По мере увеличения количества кода вы через репозиторий сможете легко синхронизировать код локальной машины и продакшн-сервера. Это гораздо проще чем синхронизировать архивом или вручную, вы убедитесь в этом сами в процессе дальнейшего обучения.
Создание конфигурации сайта для Apache
Создадим конфигурационный файл:
Измените доменное имя на ваше:
Включите ваш сайт:
Предлагаем Вашему вниманию курс «Фреймворк YII2: от теории к практике создания сайта». Курс включает в себя 13 уроков общей продолжительностью более 3-х часов
Взглянем на список предлагаемых уроков:
Что Вы получите в итоге? После прохождения уроков Вы создадите блог, используя фреймворк Yii2, и познакомитесь с одним из популярнейших в Рунете фреймворков – фреймворком Yii2.
Вот лишь часть вопросов, которые затрагиваются в курсе, и ответ на которые Вы найдете здесь:
- Как установить фреймворк Yii2, используя Composer?
- Как использовать собственный шаблон?
- Что такое контроллеры, модели и виды?
- Как работать с БД и получать из нее данные в Yii?
- Что такое виджеты и для чего они нужны?
- Как создать собственный виджет?
- Что такое ленивая и жадная загрузка данных? Какую и когда использовать?
- Как создать систему регистрации пользователей в Yii?
- Что такое аутентификация и авторизация?
- Как работать с ролями пользователей?
- Как предоставить доступ к админке только администратору?
- Как использовать свой шаблон в админской части?
- Что такое генератор кода Gii и как он может упростить нам работу?
- Как установить визуальный редактор?
Ответы на эти и многие другие вопросы Вы найдете в нашем курсе «Фреймворк YII2: от теории к практике создания сайта».
Курс безусловно будет полезен как для новичков, так и для начинающих свое знакомство с фреймворком Yii2.
Изучив курс, Вы сможете за считанные часы создавать вполне функциональные сайты средней сложности и получить отличный старт для дальнейшего изучения фреймворка Yii2.
Урок 1. Фреймворк Yii2. Установка шаблона
От автора: в данном уроке нас интересует в Yii2 установка шаблона. Мы возьмем сверстанный шаблон блога и попробуем сделать из него шаблон для фреймворка Yii2. Для этого нам потребуется не просто скопировать верстку в структуру папок фреймворка Yii2, но и произвести правильное подключение стилей и скриптов.
Используя класс AppAsset фреймворка Yii2, мы также добавим подключение css и подключение js файлов к создаваемому шаблону.
Урок 2. Фреймворк Yii2. Шаблон для Yii2. Делим шаблон на части
От автора: создавая шаблон для Yii2, мы должны не просто создать монолитную неразделимую часть, которая будет использоваться для каждой страницы будущего сайта. Создание шаблона для Yii2 зачастую предполагает разделение его на логические части. Наш шаблон мы разделим на часть для контента и отдельно будет шаблон сайдбара, который будет подключаться к основному шаблону для Yii2.
Урок 3. Фреймворк Yii2. Оформление вывода статей
От автора: создавая шаблон для Yii2, мы должны не просто создать монолитную неразделимую часть, которая будет использоваться для каждой страницы будущего сайта. Создание шаблона для Yii2 зачастую предполагает разделение его на логические части. Наш шаблон мы разделим на часть для контента и отдельно будет шаблон сайдбара, который будет подключаться к основному шаблону для Yii2.
Урок 4. Фреймворк Yii2. Оформление отдельной статьи
От автора: данный урок будет посвящен оформлению страницы, отвечающей за показ отдельной статьи. Также в уроке особое внимание мы уделим работе с мета тегами в Yii2. В частности, вы узнаете, как получить в Yii2 title страницы, а также мы напишем метод для получения прочих мета тегов: description и keywords страницы.
Урок 5. Фреймворк Yii2. Виджеты
От автора: в этом уроке мы познакомимся с темой виджетов в Yii2. В Yii2 виджеты позволяют показывать блоки информации и отдельные данные в шаблоне сайта. Создание виджета в Yii2 – достаточно простой вопрос. В уроке мы познакомимся с общими принципами создания виджетов. Использовать виджеты в Yii2 очень удобно – всего одна строка кода для вызова виджета, и он покажет необходимые данные.
Урок 6. Фреймворк Yii2. Создание виджета. Виджет меню категорий
От автора: в предыдущем уроке мы с вами познакомились с темой виджетов во фреймворке Yii2. В Yii2 виджеты есть как из коробки, так и предусмотрена возможность создания виджетов. Очень удобно использовать виджеты для повторяющихся от страницы к странице блоков данных, например для меню. В данном уроке мы с вами как раз создадим собственный виджет меню.
Урок 7. Фреймворк Yii2. Вывод статей категорий
От автора: данный урок мы посвятим вопросу вывода статей категорий. Для решения поставленной задачи нам потребуется узнать, какую категорию запросил посетитель. Для этого необходимо получить GET параметр с идентификатором категории. В Yii2 GET параметры можно получить, обратившись к объекту request.
Также нужно предусмотреть вариант обращения к несуществующей категории. В этом случае мы должны сообщить посетителю, что он обратился к несуществующей странице. Для этого мы используем механизм исключений в Yii2 (Yii2 Exception).
Урок 8. Фреймворк Yii2. Жадная и ленивая загрузка
От автора: в данном уроке мы изучим такую полезную тему, как жадная и ленивая загрузка данных. В Yii2 жадная загрузка позволяет сразу получить, кроме основных данных, еще и связанные данные. В отличие от жадной загрузки, ленивая загрузка в Yii2 позволяет получить связанные данные только тогда, когда они необходимы. Оба варианта получения связанных данных не требуют непосредственного написания дополнительных запросов и очень полезны и удобны в работе. В уроке мы рассмотрим оба варианта получения данных и узнаем, когда и какой вариант загрузки стоит использовать.
От автора: практически на любом сайте необходим механизм регистрации, поэтому данный урок мы посвятим освещению вопроса, как происходит в Yii2 регистрация пользователя. Мы создадим необходимую форму для регистрации пользователя, а также необходимые контроллер и модель для осуществления регистрации.
От автора: в этом уроке мы продолжим работу с регистрацией пользователей в фреймворке Yii2. Благодаря фреймворку Yii2, процесс организации механизма регистрации достаточно прост и реализуется относительно быстро.
Урок 11. Фреймворк Yii2. Аутентификация и авторизация
От автора: фреймворк Yii2 разделяет понятия аутентификации и авторизации. Эти понятия, как правило, объединяют одним словом – авторизация. Аутентификация в Yii2 – это процесс идентификации пользователя, иными словами, проверка корректности введенных логина и пароля пользователя. Авторизация в Yii2 – это уже проверка прав пользователя. Например, используя роли гостя и администратора, мы можем ограничить доступ гостя к админской части сайта.
Урок 12. Фреймворк Yii2. Шаблон админки
От автора: практически любой современный сайт, исключая, пожалуй, сайты типа визиток, предполагает наличие админки. В Yii2 админка создается различными вариантами. Мы используем практически классический вариант создания админки в Yii2 – модуль. Вы узнаете, как создать модуль админки и использовать свой шаблон для админки, фактически создавая приложение в приложении.
Урок 13. Фреймворк Yii2. Визуальный редактор
От автора: админка и управление материалами сайта (статьями, страницами, новостями и т.п.) предполагает удобство управления всеми этими сущностями. Это значит, что администратор сайта не обязательно должен знать HTML, но при этом без проблем должен добавлять в статью заголовки, использовать параграфы, форматирование текста статьи и т.д. Все это позволяют делать визуальные редакторы. В данном уроке мы используем расширение Yii2 CKEditor, которое позволит установить одноименный визуальный редактор для полей форм, работающих с большими объемами текстовых данных.
В этом разделе рассмотрим как создать новую страницу с надписью «Привет». В процессе решения задачи вы создадите действие контроллера и представление:
- Приложение обработает запрос и передаст управление соответствующему действию;
- Действие, в свою очередь, отобразит представление с надписью "Привет" конечному пользователю.
С помощью данного руководства вы изучите
- Как создавать действие, чтобы отвечать на запросы;
- Как создавать представление, чтобы формировать содержимое ответа;
- Как приложение отсылает запросы к действию.
Создание Действия ¶
Для нашей задачи потребуется действие say , которое читает параметр message из запроса и отображает его значение пользователю. Если в запросе не содержится параметра message , то действие будет выводить «Привет».
Информация: Действия могут быть запущены непосредственно пользователем и сгруппированы в контроллеры. Результатом выполнения действия является ответ, который получает пользователь.
Действия объявляются в контроллерах. Для простоты, вы можете объявить действие say в уже существующем контроллере SiteController , который определен в файле класса controllers/SiteController.php :
В приведенном коде действие say объявлено как метод actionSay в классе SiteController . Yii использует префикс action чтобы различать методы-действия и обычные методы. Название после префикса action считается идентификатором соответствующего действия.
Информация: Идентификаторы действий задаются в нижнем регистре. Если идентификатор состоит из нескольких слов, они соединяются дефисами, то есть create-comment . Имена методов действий получаются путём удаления дефисов из идентификатора, преобразования первой буквы каждого слова в верхний регистр и добавления префикса action . Например, идентификатор действия create-comment соответствует методу actionCreateComment .
Метод действия принимает параметр $message , который по умолчанию равен "Привет" . Когда приложение получает запрос и определяет, что действие say ответственно за его обработку, параметр заполняется одноимённым значением из запроса.
Создание представления ¶
Представления являются скриптами, которые используются для формирования тела ответа. Для нашего приложения вы создадите представление say , которое будет выводить параметр message , полученный из метода действия:
Представление say должно быть сохранено в файле views/site/say.php . Когда метод render() вызывается в действии, он будет искать PHP файл с именем вида views/ControllerID/ViewName.php .
Стоит отметить, что в коде выше параметр message экранируется для HTML перед выводом. Это обязательно так как параметр приходит от пользователя, который может попытаться провести XSS атаку путём вставки зловредного JavaScript кода.
Вы можете дополнить представление say HTML тегами, текстом или кодом PHP. Фактически, представление say является простым PHP скриптом, который выполняется методом render(). Содержимое, выводимое скриптом представления, будет передано пользователю приложением.
Попробуем ¶
После создания действия и представления вы можете перейти на новую страницу по следующему URL:
Будет отображена страница с надписью «Привет мир». Она использует ту же шапку и футер, что и остальные страницы приложения. Если вы не укажете параметр message , то увидите на странице «Привет». Это происходит потому, как message передаётся в метод actionSay() и значение по умолчанию — «Привет».
Информация: Новая страница использует ту же шапку и футер, что и другие страницы, потому что метод render() автоматически вставляет результат представления say в, так называемый, макет views/layouts/main.php .
Параметр r в нашем URL требует дополнительных пояснений. Он связан с маршрутом (route), который представляет собой уникальный идентификатор, указывающий на действие. Его формат ControllerID/ActionID . Когда приложение получает запрос, оно проверяет параметр r и, используя ControllerID , определяет какой контроллер использовать для обработки запроса. Затем, контроллер использует часть ActionID , чтобы определить, какое действие выполняет реальную работу. В нашем случае маршрут site/say будет соответствовать контроллеру SiteController и его действию say . В результате для обработки запроса будет вызван метод SiteController::actionSay() .
Информация: Как и действия, контроллеры также имеют идентификаторы, которые однозначно определяют их в приложении. Идентификаторы контроллеров используют те же правила именования, что и идентификаторы действий. Имена классов контроллеров получаются путём удаления дефисов из идентификатора, преобразования первой буквы каждого слова в верхний регистр и добавления в конец Controller . Например, идентификатор контроллера post-comment соответствует имени класса контроллера PostCommentController .
Заключение ¶
В этом разделе вы затронули тему контроллеров и представлений в паттерне MVC. Вы создали действие как часть контроллера, обрабатывающего запросы, и представление, участвующее в формировании ответа. В этом процессе никак не была задействована модель, так как в качестве данных выступает лишь простой параметр message .
Также вы познакомились с концепцией маршрутизации, которая является связующим звеном между запросом пользователя и действием контроллера.
В следующем разделе вы узнаете как создавать модели и добавлять новые страницы с HTML формами.
Читайте также: