В даному розділі розглянемо як створити нову сторінку з надписом "Привіт". У процесі вирішення задачі ви створите дію контролера і представлення:
В даному керівництві ви дізнаєтесь як:
Для нашої задачі знадобиться дія say
, яка зчитує
параметр message
із запиту і відображає його значення користувачу. Якщо в запиті
відсутній параметр message
, то дія буде відображати "Привіт".
Info: Дії являються об’єктами, на які користувач може посилатись для виконання. Дії згруповані в контролери. Результатом виконання дії є відповідь, яку отримує користувач.
Дії повинні оголошуватись в контролерах. Для простоти, ви можете
оголосити дію 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
вважається ідентифікатором відповідної дії.
Коли черга доходить до іменування дій, слід розуміти як Yii поводиться з ідентифікаторами дій. Ідентифікатори дій можуть
бути лише в нижньому регістрі. Якщо ідентифікатор складається з декількох слів, вони з’єднуються дефісами
(наприклад, create-comment
). Імена методів дій отримуються шляхом видалення дефісів з ідентифікатора,
перетворення першої літери кожного слова у верхній регістр і додавання префікса action
. Наприклад,
ідентифікатор дії create-comment
відповідає методу actionCreateComment
.
Метод дії у нашому прикладі приймає параметр $message
, який за замовчуванням визначено як "Привіт"
(так само,
як ви звикли визначати значення за замовчуванням для аргументів функції у PHP). Коли додаток
отримує запит і визначає, що дія say
відповідає за його опрацювання, додаток призначає
цьому параметру значення однойменного параметра із запиту. Іншими словами, якщо запит містить
параметр message
зі значенням "До побачення"
, то змінній $message
всередині дії буде призначено це значення.
Всередині метода дії, для відображення представлення з ім’ям say
, використовується метод
render(). Для того, щоб вивести повідомлення,
у представлення передається параметр message
. Результат формування повертається методом дії. Цей результат приймається
додатком та відображається кінцевому користувачу в браузері (як частина цілої HTML-сторінки).
Представлення є скриптами, які використовуються для генерування вмісту відповіді.
Для нашого додатку ви створите представлення say
, яке буде виводити параметр message
, отриманий із методу дії:
<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>
Представлення say
мусить бути збережено у файлі views/site/say.php
. Коли метод render()
викликається в дії, він буде шукати PHP-файл з ім’ям виду views/ControllerID/ViewName.php
.
Варто зазначити, що у вищезазначеному коді параметр message
екранується для HTML
перед відображенням. Це обов’язково, бо параметр приходить від користувача, котрий може спробувати провести
XSS атаку,
шляхом вставки небезпечного JavaScript кода.
Ви можете доповнити представлення say
HTML-тегами, текстом або кодом PHP.
Фактично, представлення say
є простим PHP-скриптом, який виконується методом render().
Вміст, який формується скриптом представлення, буде передано додатком користувачу.
Після створення дії і представлення, ви можете перейти на нову сторінку по наступному URL:
https://hostname/index.php?r=site%2Fsay&message=Привіт+світ
Буде відображена сторінка з надписом "Привіт світ". Вона використовує ту ж шапку та футер, що і решта сторінок додатка.
Якщо ви не вкажете параметр message
в URL, то побачите на сторінці лише "Привіт". Це відбувається тому, що message
передається як параметр в метод actionSay()
, а коли він не вказаний,
використовується значення за замовчуванням "Привіт".
Info: Нова сторінка використовує ту ж шапку та футер, що й решта сторінок, тому що метод render() автоматично підставляє результат формування представлення
say
в, так званий, макет, який в даному випадку розміщено уviews/layouts/main.php
.
Параметр r
у вищезазначеному URL потребує додаткових пояснень. Він вказує маршрут, що являє собою унікальний для додатка ідентифікатор,
який вказує на дію. Його формат ControllerID/ActionID
. Коли додаток отримує запит,
він перевіряє цей параметр і, використовуючи частину ControllerID
, визначає який контролер
слід використовувати для опрацювання запиту. Потім, контролер використовує частину ActionID
,
щоб визначити яку дію використовувати для виконання реальної роботи. В нашому випадку маршрут site/say
буде відповідати контролеру SiteController
і його дії say
. В результаті,
для опрацювання запиту буде викликано метод SiteController::actionSay()
.
Info: Як і дії, контролери також мають ідентифікатори, котрі однозначно визначають їх в додатку. Ідентифікатори контролерів використовують ті ж самі правила іменування, що і ідентифікатори дій. Імена класів контролерів отримуються шляхом видалення дефісів з ідентифікатора, перетворення першої літери кожного слова у верхній регістр і додавання в кінець слова
Controller
. Наприклад, ідентифікатор контролераpost-comment
відповідає імені класу контролераPostCommentController
.
В даному розділі ви торкнулися таких частин шаблону проектування MVC як контролери та представлення.
Ви створили дію, як частину контролера, для опрацювання специфічного запиту. А також ви створили представлення
для формування вмісту відповіді. В цьому процесі ніяк не використовувалась модель, оскільки в ролі даних виступає тільки простий параметр message
.
Також ви ознайомились із концепцією маршрутизації, котра є сполучною ланкою між запитом користувача і дією контролера.
В наступному розділі ви дізнаєтесь як створити модель та додати нову сторінку з HTML-формою.