Yii2: работа с экземпляром приложения

yii2

Одно из основных понятий в фреймворке Yii 2.0 — приложение. В контексте Yii2, приложение — объект, который определяет структуру и и жизненный цикл запросов на веб-сайте. Приложение, так же, может быть и консольным, но мы будем рассматривать веб-приложение.

Каждый запрос к Yii-приложению осуществляется через входной скрипт, который настраивает приложение:

$application = new yii\web\Application($config);

и запускает его:

$application->run();

Объект запущенного приложения доступен из всех его составляющих через Yii::$app.

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

Yii::$app->request

Класс request, который обрабатывает все детали http-запроса в приложении. Yii::$app->request является оберткой для обычных php переменных $_SERVER, $_POST, $_GET, $_COOKIES, а так же REST. Если обратить внимание на документацию, этот класс содержит 52 свойства и 89 публичных методов! Советую обратить внимание на них и изучить внимательно, так как подробное описание здесь займет слишком много времени. Рассмотрим типовой пример использования.

Yii::$app->request->post()

Данный метод возвращает значение указанного параметра запроса POST или массив всех параметров, если не указан конкретный. Например можно получить данные формы LoginForm стандартного приложения advanced:

print_r(Yii::$app->request->post());
//Array
//(
//    [_csrf] => TXpNZWYzUzIBAAo9EFh.dAIXGwcPZWNUHh88ECAAZFkGJQpdUQRhCg==
//    [LoginForm] => Array
//        (
//            [username] => Vasya
//            [password] => vasin%password
//            [rememberMe] => 0
//        )
//
//    [login-button] =>
//)

Еще один типовой способ использования — получение значений полей модели:

<span class="crayon-v">$model</span><span class="crayon-o">-></span><span class="crayon-i">attributes</span> <span class="crayon-o">=</span> <span class="crayon-e">Yii::</span><span class="crayon-v">$app</span><span class="crayon-o">-></span><span class="crayon-i">request</span><span class="crayon-o">-></span><span class="crayon-e">post</span><span class="crayon-sy">(</span><span class="crayon-s">'LoginForm'</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span>

Yii::$app->formatter

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

Примеры использования:

echo Yii::$app->formatter->asDate('2014-11-18', 'long'); // November 18, 2014
echo Yii::$app->formatter->asPercent(0.258, 2); // 25.80%
echo Yii::$app->formatter->asBoolean(true); // Yes
echo Yii::$app->formatter->asDate(null); // (Not set)
Yii::$app->formatter->locale = 'ru-RU';
echo Yii::$app->formatter->asDate('2014-11-18', 'long'); // 18 ноября 2014 г.
echo Yii::$app->formatter->asPercent(0.258, 2); // 25,80 %
echo Yii::$app->formatter->asBoolean(true); // Да
echo Yii::$app->formatter->asDate(null); // (не задано)
echo Yii::$app->formatter->asEmail('admin@nix-tips.ru'); // <a href="mailto:admin@nix-tips.ru">admin@nix-tips.ru</a>

Yii::$app->user

Для управление пользователями и аутентификацией можно использовать класс Yii::$app->user. В стандартных приложениях basic и advanced эти возможности уже реализованы. Одни из самых популярных методов:

Yii::$app->user->isGuest
Yii::$app->user->login()
Yii::$app->user->logout()
Yii::$app->user->setIdentity()

Yii::$app->getSecurity

Можно использовать для хеширования и проверки паролей, генерирования псевдо-случайных данных и шифрования.

В общем случае, используется примерно так:

$hash = Yii::$app->getSecurity()->generatePasswordHash($password);
Yii::$app->getSecurity()->validatePassword($password, $hash);

Yii::$app->mailer

Большинство веб-приложений, так или иначе, нуждаются в функции отправки электронной почты. Yii2 использует swiftmailerYii::$app->mailer позволяет гибко настраивать данный компонент. Пример использования:

Yii::$app->mailer->compose()
    ->setFrom('admin@nix-tips.ru')
    ->setTo($form->email)
    ->setSubject($form->subject)
    ->setTextBody($form->text)
    ->setHtmlBody('<b>HTML content</b>')
    ->send();

Yii::$app->response

Ответ клиенту, отсылаемый сервером, содержит заголовки, куки и данные. Все эти данные доступны в классе Yii::$app->response. Примеры использования:

Yii::$app->response->format = 'json';
Yii::$app->response->sendFile(’file/to/send.dat’)->send();
Yii::$app->response->statusCode = 200;
Yii::$app->response->redirect('//nix-tips.ru/new', 301)->send();
Yii::$app->response->headers;

Yii::$app->db

Класс предоставляет доступ в объекту подключения к базе данных приложения. Его можно использовать для работы с базой данных, для обращения к любым ее свойствам. По сути, это реализация php pdo. Например, для прямого обращения к базе данных, в обход конкретной модели, расширяющей Active Record:

$command = $connection->createCommand('UPDATE user SET status=2');
$command->execute();

Yii::$app->urlManager

Класс, который разбирает http запросы в приложении, а так же, может генерировать ссылки на разные модули и компоненты приложения и красивые урлы. Большинство «грязной» работы скрыто от наших глаз , однако мы можем использовать Yii::$app->urlManager для следующих вещей:

Yii::$app->urlManager->createAbsoluteUrl();
Yii::$app->urlManager->createUrl();

Yii::$app->authManager

Этот класс можно использовать для настройки и управления доступом на основе ролей. Возможно создание ролей rbac, задание ролей конкретным пользователям, проверку прав доступа и другое.

Yii::$app->view

Предоставляет доступ к объекту view структуры mvc. View содержит много методов, однако одним из самых популярных является render(). Данный метод выводит результат работы приложения в веб-браузер или консоль, в зависимости от типа приложения. События view, так же, могут быть очень полезными в ряде случаев

Заключение

В данной заметке кратко описаны некоторые детали реализации приложения в Yii 2.0 и примеры их использования. Что очень полезно для понимания сути Yii2 новичками, не имеющими опыта с php фреймворками.

1 thought on “Yii2: работа с экземпляром приложения

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

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