В даному розділі розглянемо як створити нову сторінку з надписом «Привіт». В процесі вирішеня задачі ви створите подію контролера і представлення:
- Додаток опрацює запит і передасть управління відповідній події;
- Подія, в свою чергу, відобразить представлення з надписом "Привіт" кінцевому користувачу.
З допомогою даного керівництва ви вивчите
- Як створити подію, яка буде відповідати на запити;
- Як створити представлення, щоб формувати зміст відповіді;
- Як додаток відправляє запити до події.
Для нашої задачі знадобиться подія say
, котра читає параметр message
із
запиту і відображає його значення користувачу. Якщо в запиті відсутній параметр message
, то подія буде відображати «Привіт».
Інформація: Події можуть бути запущені безпосередньо користувачем і згруповані в контролери. Результатом виконання події є відповідь, яку отримує користувач.
Події оголошуються в контролерах. Для зручності, ви можете оголосити подію
say
в уже існуючому контролері SiteController
, який оголошений у файлі класа controllers/SiteController.php
:
<?php
namespace app\controllers;
use yii\web\Controller;
class SiteController extends Controller
{
// ...існуючий код...
public function actionSay($message = 'Привіт')
{
return $this->render('say', ['message' => $message]);
}
}
В наведеному коді подія say
оголошена як метод actionSay
в класі SiteController
.
Yii використовує префікс action
для того, щоб відрізняти методи-події і звичайні методи. Назва після префікса action
вважається ідентифікатором відповідної події.
Інформація: Ідентифікатори подій задаються в нижньому регістрі. Якщо ідентифікатор складається з декількох слів, вони з’єднуються дефісами, тобто
create-comment
. Імена методів подій отримуються шляхом видалення дефісів з ідентифікатора, перетворення першої літери кожного слова у верхній регістр і добавлення префіксаaction
. Наприклад, ідентифікатор подіїcreate-comment
відповідає методуactionCreateComment
.
Метод події приймає параметр $message
, який за замовчуванням дорівнює "Привіт"
. Коли додаток отримує запит і визначає, що подія say
відповідає за його опрацювання, параметр наповнюється одноіменним значенням із запиту.
Всередені метода події, для відображення представлення з ім’ям say
, використовується метод
[[yii\web\Controller::render()|render()]]. Для того, щоб вивести повідомлення, у представлення передається параметр message
.
Результат відображення з допомогою return
передається додатку, котрий віддає його користувачу.
Представлення є скриптами, які використовуються для формування тіла відповіді. Для нашого
додатку ви створите представлення say
, яке буде виводити параметр message
, отриманий із метода події:
<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>
Представлення say
мусить бути збережено у файлі views/site/say.php
. Коли метод [[yii\web\Controller::render()|render()]]
викликається в події, він буде шукати PHP файл з ім’ям виду views/ControllerID/ActionID/ViewName.php
.
Варто замітити, що в коді вище параметр message
[[yii\helpers\Html::encode()|екранується для HTML]] перед відображенням.
Це обов’язково так як параметр приходить від користувача, котрий може спробувати провести
XSS атаку
шляхом вставки небезпечного JavaScript кода.
Ви можете доповнити представлення say
HTML тегами, текстом або кодом PHP. Фактично, представлення say
є
простим PHP скриптом, який виконується методом [[yii\web\Controller::render()|render()]]. Зміст, який відображається
скриптом представлення, буде передано додатком користувачу.
Після створення події і представлення ви можете перейти на нову сторінку по наступному URL:
http://hostname/index.php?r=site/say&message=Привіт+світ
Буде відображена сторінка з надписом Привіт світ. Вона використовує ту ж шапку і футер, що і решта сторінок додатка.
Якщо ви не вкажете параметр message
, то побичите на сторінці лише «Привіт». Це відбувається тому, що message
передається
в метод actionSay()
і значення за замовчуванням — «Привіт».
Інформація: Нова сторінка використовує ту ж шапку і футер, що і решта сторінок, тому що метод [[yii\web\Controller::render()|render()]] автоматично підставляється в результат представлення
say
в, так називаємий, макетviews/layouts/main.php
.
Параметр render
потребує додаткових пояснень. Він пов’язаний з маршрутом (route), який являє собою унікальний ідентифікатор, який вказує на подію. Його формат ControllerID/ActionID
. Коли додаток отримує запит, він перевіряє параметр render
і, використовуючи ControllerID
, визначає який контролер слід використовувати для опрацювання запиту. Потім, контролер використовує частину ActionID
, щоб визначити яка подія виконує реальну роботу.
В нашому випадку маршрут site/say
буде відповідати контролеру SiteController
і його події say
.
В результаті, для відпрацювання запиту буде визваний метод SiteController::actionSay()
.
Інформація: Як і події, контролери також мають ідентифікатори, котрі однозначно визначають їх в додатку. Ідентифікатори контролерів використовують ті ж самі правила, що і ідентифікатори подій. Імена класів контролерів отримуються шляхом видалення дефісів з ідентифікатора, перетворення першої літери кожного слова у верхній регістр і додавання в кінець
Controller
. Наприклад, ідентифікатор контролераpost-comment
відповідає імені класа контролераPostCommentController
.
В даному розділі ви затронули тему контролерів і представленнь в паттерні MVC. Ви створили подію як частину контролера,
який опрацьовує запити, і представлення, яке приймає участь у формувані відповіді. В цьому процесі ніяк не була задіяна
модель, так як в ролі даних виступає тільки простий параметр message
.
Також ви ознайомились із концепцією маршрутизації, котра є сполучною ланкою між запитом користувача і подією контролера.
В наступному розділі ви дізнаєтесь як створювати моделі і добавляти нові сторінки з HTML формами.