Перша сторінка — Symfony
Створення нової сторінки — байдуже, HTML-сторінки чи JSON-ендпоінта — це процес із двох кроків:
-
Створити контролер: контролер — це PHP-функція, яку ви пишете і яка будує сторінку. Ви берете інформацію з вхідного запиту й використовуєте її, щоб створити обʼєкт Symfony
Response, який може містити HTML-вміст, JSON-рядок або навіть бінарний файл на кшталт зображення чи PDF; -
Створити маршрут: маршрут — це URL (наприклад,
/about) до вашої сторінки, що вказує на контролер.
Скрінкаст
Віддаєте перевагу відеоурокам? Перегляньте серію скрінкастів Cosmic Coding with Symfony.
Дивіться також
Symfony приймає життєвий цикл HTTP «запит — відповідь». Щоб дізнатися більше, перегляньте Основи HTTP.
Створення сторінки: маршрут і контролер
Порада
Перш ніж читати далі, переконайтеся, що ви прочитали статтю Налаштування і можете відкрити свій новий Symfony-застосунок у браузері.
Припустімо, ви хочете створити сторінку — /lucky/number — яка генерує щасливе (ну, випадкове) число і друкує його. Для цього створіть клас «Controller» і метод «number» усередині нього:
<?php
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class LuckyController
{
public function number(): Response
{
$number = random_int(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
Тепер потрібно повʼязати цю функцію-контролер із публічним URL (наприклад, /lucky/number), щоб метод number() викликався, коли користувач переходить за цією адресою. Цей звʼязок визначається атрибутом #[Route] (у PHP атрибути використовуються, щоб додавати метадані до коду):
// src/Controller/LuckyController.php
// ...
+ use Symfony\Component\Routing\Attribute\Route;
class LuckyController
{
+ #[Route('/lucky/number')]
public function number(): Response
{
// це виглядає точно так само
}
}
Ось і все! Якщо ви користуєтеся вебсервером Symfony, спробуйте перейти за адресою: http://localhost:8000/lucky/number
Порада
Symfony рекомендує визначати маршрути як атрибути, щоб код контролера і конфігурація його маршруту були в одному місці. Проте, якщо вам так зручніше, ви можете визначати маршрути в окремих файлах у форматах YAML або PHP.
Якщо ви бачите, що вам виводиться щасливе число, — вітаємо! Але перш ніж бігти грати в лотерею, погляньмо, як це працює. Памʼятаєте два кроки для створення сторінки?
-
Створити контролер і метод: це функція, у якій ви будуєте сторінку і зрештою повертаєте обʼєкт
Response. Ви дізнаєтеся більше про контролери в окремому розділі, зокрема про те, як повертати JSON-відповіді; -
Створити маршрут: маршрут визначає шлях URL до вашої сторінки і те, який метод контролера викликати. Ви дізнаєтеся більше про маршрутизацію в окремому розділі, зокрема про те, як робити змінні URL.
Команда bin/console
У вашому проєкті вже є потужний інструмент для налагодження: команда bin/console. Спробуйте запустити її:
$ php bin/console
Ви побачите список команд, які можуть надати інформацію для налагодження, допомогти згенерувати код, згенерувати міграції бази даних і багато іншого. Що більше пакетів ви встановлюєте, то більше команд бачитимете.
Щоб отримати список усіх маршрутів у вашій системі, скористайтеся командою debug:router:
$ php bin/console debug:router
Ви маєте побачити свій маршрут app_lucky_number у списку:
---------------- ------- --------------
Name Method Path
---------------- ------- --------------
app_lucky_number ANY /lucky/number
---------------- ------- --------------
Окрім app_lucky_number, ви також побачите налагоджувальні маршрути — про них далі в наступному розділі.
Ви дізнаєтеся ще про багато команд, читаючи далі!
Порада
Якщо ваш шелл підтримується, ви також можете налаштувати підтримку автодоповнення в консолі. Це автоматично доповнює команди та інший ввід під час використання
bin/console. Дивіться документ про Console, щоб дізнатися більше про налаштування автодоповнення.
Панель веб-налагодження (Web Debug Toolbar): мрія для налагодження
Одна з дивовижних можливостей Symfony — це Web Debug Toolbar: панель, що відображає величезну кількість налагоджувальної інформації внизу вашої сторінки під час розробки. Усе це вмикається за замовчуванням, коли ви використовуєте пакет Symfony (Symfony pack) під назвою symfony/profiler-pack.
Ви побачите темну панель унизу сторінки. Про всю інформацію, яку вона містить, ви дізнаєтеся дорогою, але не соромтеся експериментувати: наводьте курсор і клацайте різні іконки, щоб отримати інформацію про маршрутизацію, продуктивність, логування тощо.
Рендеринг шаблону
Якщо ви повертаєте HTML зі свого контролера, вам, найімовірніше, захочеться відрендерити шаблон. На щастя, Symfony поставляється з Twig: мовою шаблонів, яка є мінімалістичною, потужною і, чесно кажучи, доволі приємною.
Установіть пакет twig за допомогою:
$ composer require twig
Переконайтеся, що LuckyController розширює базовий клас Symfony Symfony\Bundle\FrameworkBundle\Controller\AbstractController:
// src/Controller/LuckyController.php
// ...
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- class LuckyController
+ class LuckyController extends AbstractController
{
// ...
}
Тепер скористайтеся зручним методом render(), щоб відрендерити шаблон. Передайте йому змінну number, щоб ви могли використати її у Twig:
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
// ...
class LuckyController extends AbstractController
{
#[Route('/lucky/number')]
public function number(): Response
{
$number = random_int(0, 100);
return $this->render('lucky/number.html.twig', [
'number' => $number,
]);
}
}
Файли шаблонів лежать у теці templates/, яка була створена для вас автоматично під час встановлення Twig. Створіть нову теку templates/lucky з новим файлом number.html.twig усередині:
{# templates/lucky/number.html.twig #}
<h1>Your lucky number is {{ number }}</h1>
Синтаксис {{ number }} використовується, щоб друкувати змінні у Twig. Оновіть сторінку в браузері, щоб отримати нове щасливе число!
Тепер ви можете здивуватися, куди поділася Web Debug Toolbar: це тому, що в поточному шаблоні немає тега </body>. Ви можете додати елемент body самостійно або розширити base.html.twig, який містить усі типові HTML-елементи.
У статті про шаблони ви дізнаєтеся все про Twig: як робити цикли, рендерити інші шаблони й використовувати його потужну систему успадкування макетів.
Огляд структури проєкту
Чудові новини! Ви вже попрацювали в найважливіших теках свого проєкту:
config/
: Містить конфігурацію. Тут ви налаштовуватимете маршрути, сервіси і пакети.
src/
: Тут живе весь ваш PHP-код.
templates/
: Тут живуть усі ваші шаблони Twig.
Більшість часу ви працюватимете в src/, templates/ або config/. Читаючи далі, ви дізнаєтеся, що можна робити всередині кожної з них.
А що ж інші теки в проєкті?
bin/
: Тут живе славнозвісний файл bin/console (та інші, менш важливі виконувані файли).
var/
: Тут зберігаються автоматично створені файли, як-от файли кешу (var/cache/) і логи (var/log/).
vendor/
: Тут живуть сторонні (тобто «vendor») бібліотеки! Вони завантажуються через менеджер пакетів Composer.
public/
: Це document root вашого проєкту: сюди ви кладете будь-які публічно доступні файли.
А коли ви встановлюєте нові пакети, нові теки створюватимуться автоматично за потреби.
Що далі?
Вітаємо! Ви вже починаєте вивчати Symfony і відкривати для себе цілком новий спосіб побудови красивих, функціональних, швидких і зручних у підтримці застосунків.
Гаразд, час завершити вивчення основ, прочитавши ці статті:
Далі дізнайтеся про інші важливі теми, як-от контейнер сервісів, систему форм, використання Doctrine (якщо вам потрібно робити запити до бази даних) та інше!
Гарного вам часу!
Заглиблюйтеся в основи HTTP і фреймворку
Виправити терміни, дописати розділ або взяти нову главу може кожен. Термінологію узгоджуємо в глосарії, щоб переклад лишався однорідним.