Что на самом деле представляет из себя Yii2 ?

yii2 logo

Yii2 это современный и широконаправленный PHP фреймворк, для разработки веб и консольных приложений. Он призывает к чистому написанию кода, без лишних связанностей, принципу DRY (don’t repeat yourself) направленный на снижение повторения кода, событийно-ориентированное программирование, когда выполнение подпрограммы определяется исходя из события запущенного пользователем, соглашение по конфигурации, по которому если класс соответствует соглашению наименованию, тогда он не нуждается в дополнительной конфигурации, а так же модульная структура приложения. Для фреймворка уже разработано много библиотек, виджетов и расширений как основными, так и сторонними разработчиками. Это все позволяет быстро разрабатывать качественные приложения.

Изучать и осваивать Yii2 поможет онлайн документация и wiki, есть документация на русском. Многие вопросы находят свои ответы на stackoverflow, а также возможность задать вопросы в соответствующем разделе (issue tracker) на GitHub. Помимо этого есть форум на официальном сайте, чат, активное сообщество в facebook.

Сразу из коробки реализована отложенная загрузка (lazy loading), это позволяет загружать и исполнять только те компоненты, которые нужны для выполнения запроса. Можно увеличить производительность за счет применения различных техник кеширования.

Это отличный фреймворк как для небольших проектов, которые легко можно начать, взяв за основу базовый шаблон так и для масштабных проектов, можно использовать продвинутый (advanced) шаблон. Хотя, нужно отметить, что выбор шаблона это совершенно не обязательный пункт, можно скачать фреймворк и без шаблона, выстроив необходимую структуру. Для большинства проектов Yii2 будет также удобен за счет возможности разделения функциональности на модули.

Возможности yii2

Ниже будут перечислены основные возможности фреймворка. Каждый компонент требует более детального описания, однако в рамках этой статьи будет лишь поверхностный обзор.

MVC

Фреймворк базируется на паттерне проектирования MVC. Для моделей используется Active Record (AR), прекрасно зарекомендовавший себя в Yii 1.0, сейчас он еще удобнее и эффективнее.Кроме Active Record для моделей

<code class="php">namespace app\models;
use yii\db\ActiveRecord;
class Post extends ActiveRecord
{
    public static function tableName()
    {
        return 'post';
    }
}</code>

Для вывода информации во View есть варианты использования шаблонизаторов Smatry или Twig, также можно использовать сам PHP как шабонизатор, он прекрасно с этим справляется.

Контроллеры могут содержать действия (actions), поведения (behaviors) а так же другие функции. Их задача организовать взаимодействие моделей и представлений. Помните, лучшие контроллеры – тонкие контроллеры!

<code class="php">class PostController extends Controller {
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['post'],
                ],
            ],
        ];
    }
    public function actionIndex()
    {
        return $this->render('index');
    }
}</code>

ActiveRecord

Работать со связанными данными становится очень просто и интуитивно понятно, если использовать ActiveRecord. Не придется писать множество запросов, километры SQL кода, заботится о синтаксисе при работе с конкретной СУБД. Используя AR можно составлять сложные запросы, выстраивать связи между различными базами данных (MySQL и MongoDB, например). Вот пример, как просто получить данные из базы:

<code class="php">$post = Post::findOne($id)->with('comments');</code>

Пример иллюстрирует выборку нужной статьи из базы и все комментарии к ней. Задействованы две таблицы: Post и Сomments

Аутентификация и авторизация

В базовом (basic) и расширенном (advanced) шаблонах уже реализованы базовые функции пользователя: методы регистрации, авторизации и аутентификации (разные компоненты), сброс пароля. RBAC (Role Based Access Control) позволяет реализовывать расширенные схемы авторизации. Можно разграничить доступ для множества групп (например, администраторы, модераторы, редакторы) пользователей.

<code class="php">if (!Yii::$app->user->isGuest) {
    return $this->goHome();
}</code>

Валидация

Можно использовать стандартные фильтры для валидации данных или создавать свои собственные с особой логикой.

<code class="php">[['title'], 'string', 'max' => 32]</code>

Так поле title на форме должно быть заполнено печатными символами, не превышая количество знаков более 32.

Формы

Для простой и удобной работы с формами разработан специальный виджет ActiveForm. Для форм можно использовать валидацию на клиенте или на сервере, также доступна AJAX валидация.

<code class="php"><?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'rememberMe')->checkbox() ?></code>

Безопастность

Фреймворк уже включает возможности защиты от наиболее распространенных угроз: XSS уязвимости (тип атаки, целью которого является внедрить на страницу вредоносный код и выполнить его на компьютере пользователя при открытии им этой страницы), межсайтовая подделка запроса, также известен как XSRF (вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP), а также brute-force атак (подбор пароля с помощью перебора до тех пор, пока он не будет найден). Используя совокупность современных методов защиты можно не переживать о внедрении опасного кода (SQL injection) в проект.

<code class="php">Yii::$app->security->validatePassword($password, $this->password_hash);</code>

Интернационализация (I18N) и локализация (L10N)

Создавать мультиязычные приложения легко, когда есть поддержка локализации в фреймворке.

<code class="php">echo Yii::t('app', 'This string will be translated!');</code>

Строку будет переведена в зависимости от языка выбранного пользователем. Результатом вывода может быть

<code class="php">This string will be translated!
Перевод это строки на Русский</code>

Кеширование

Yii2 предоставляет широкие возможности для кеширования. Например, можно кешировать данные или отдельные фрагменты, кеширование страниц, HTTP кеширование, кеширование схем базы данных, запросы.

Генерация кода

Генерация кода с помощью Gii позволяет создавать модели, контроллеры, CRUD (основные операции над базами данных - создание, чтение, обновление, удаление) для моделей, генерировать формы, модули, расширения прямо из веб интерфейса.

Отладчик

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

yii debuger

Множество виджетов, хелперов, расширений

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

Официальные расширения Yii2

Эти расширения поддерживаются командой разработчиков фреймворка

apidoc API для создания документации.

authclient OpenID, OAuth и OAuth2.

bootstrap Twitter Bootstrap.

codeception интегрирован Codeception.

composer инсталятор Composer.

debug отладчик для Yii2 приложений.

elasticsearch интегрирован полнотекстовый поисковый движок Elasticsearch.

faker для генерации произвольных данных.

gii генератор кода.

imagine обертка над Imagine.

jui JQuery UI виджеты.

mongodb интеграция с MongoDB.

redis поддержка redis.

smarty шаблонизатор Smarty.

sphinx полнотекстовый поисковой движок Sphinx.

swiftmailer работа с электронной почтой посредством SwiftMailer.

twig шаблонизатор Twig.

Каждый разработчик может принять участие в разработке фреймворка Yii. Предлогайте свой код на GitHub, информируйте о найденных ошибках в issue, а также задавайте свои вопросы в чате.

comments powered by HyperComments