Одно из основных понятий в фреймворке 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 использует swiftmailer. Yii::$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 фреймворками.
Спасибо большое за эту статью