Создайте вашу первую страницу в Symfony
Дата обновления перевода 2024-07-31
Создайте вашу первую страницу в Symfony
Создание новой страницы – не важно, будет это страница HTML или JSON – это простой процесс, состоящий из 2 шагов:
- Создайте маршрут: Маршрут – это URL (например,
/about
) вашей страницы и указание на контроллер; - Создайте контроллер: Контроллер – это РНР функция, написанная
вами, которая создаёт страницу. Вы берете входящую информацию
запроса, и используете её для создания объекта Symfony
Response
, который может содержать HTML содержимое, JSON строку, или даже бинарный файл вроде изображения или PDF.
Screencast
Предпочитаете видео-уроки? Посмотрите сериал Восхитительная разработка с Symfony.
See also
Symfony охватывает жизненный цикл HTTP запрос-ответ. Чтобы узнать больше см. Symfony и основы HTTP.
Cоздание страницы: маршрут и контроллер
Tip
Перед тем, как продолжать, убедитесь в том, что вы прочли главу про установку, и можете вызвать приложение Symfony из своего браузера.
Допустим, вы хотите создать страницу /lucky/number
, которая будет генерировать
счастливое (хорошо, случайное) число и отображать его. Для этого, создайте
«класс контроллера» и внутри него метод «контроллера»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?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 атрибуты используются для добавления
метаданных к коду):
1 2 3 4 5 6 7 8 9 10 11 12 13
// 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
Tip
Symfony рекомендует определять маршруты как атрибуты, чтобы код контроллера и конфигурация маршрутов находились в одном месте. Однако, если вы предпочитаете, вы можете определять маршруты в отдельных файлах, используя форматы YAML, XML и PHP.
Если вы увидите отображенное счастливо число – поздравляем! Однако перед тем, как бежать играть в лотерею, посмотрите, как это работает. Помните два шага по созданию страницы?
- Создайте контроллер и метод: Это функция, в которой вы строите страницу и возвращаете
объект
Response
. Вы узнаете больше о контроллерах в разделе о них, включая то, как возвращать ответы JSON. - Создайте маршрут: В
config/routes.yaml
, маршрут определяет URL к вашей странице (path
), и какойcontroller
вызывать. Вы узнаете больше о маршрутизации в разделе о ней, включая то, как cоздавать переменные URL;
Команда bin/console
Ваш проект уже имеет в себе мощный инструмент отладки: команду bin/console
.
Попробуйте выполнить её:
1
$ php bin/console
Вы должны увидеть список команд, которые могут дать вам информацию об отладке, помочь сгенерировать код, сгенерировать миграции DB и многое другое. Когда вы будете устанавливать больше пакетов, вы будете видеть больше команд.
Чтобы получить список всех маршрутов в вашей системе, используйте команду
debug:router
:
1
$ php bin/console debug:router
Сейчас вы должны увидеть ваш маршрут app_lucky_number
сверху:
1 2 3 4 5
---------------- ------- ------- ----- --------------
Имя Метод Схема Хост Путь
---------------- ------- ------- ----- --------------
app_lucky_number ЛЮБОЙ ЛЮБАЯ ЛЮБОЙ /lucky/number
---------------- ------- ------- ----- --------------
Вы также увидите маршруты отладки под app_lucky_number
-- больше о маршрутах
отладки будет в следующем разделе.
Вы узнаете еще о многих командах дальше!
Tip
Если ваша оболочка поддерживается, вы также можете настроить поддержку заполнения
консоли. Это автоматически заполняет команды и другой ввод при использовании
bin/console
. См. документ Console , чтобы
узнать больше о том, как настроить заполнение.
Панель инструментов веб-отладки: отладка мечты
Одной из потрясающих функция Symfony является Web Debug Toolbar (панель инструментов веб-отладки):
панели, которая отображает огромное количество информафии отладки внизу вашей страницы при
разработке. Это все включено при установке с использованием пакета Symfony
под названием symfony/profiler-pack
.
Вы увидите темную панель внизу страницы. Вы узнаете больше обо всей информации, которую она содержит, далее, но не бойтесь экспериментировать: наведите курсор и нажимайте на разные иконки, чтобы получить информацию о маршрутизации, производительности, ведению логов и другом.
Отображение шаблона
Если вашему контроллеру нужно возвращать HTML, то вы, скорее всего, захотите использовать шаблон. К счастью, в Symfony есть шаблонизатор Twig – простой, многофункциональный и, на самом деле, классный.
Для начала, установите Twig:
1
$ composer require twig
Далее, убедитесь в том, что LuckyController
расширяет базовый класс
Symfony Controller:
1 2 3 4 5 6 7 8 9 10
// src/Controller/LuckyController.php
// ...
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
- class LuckyController
+ class LuckyController extends AbstractController
{
// ...
}
Теперь, используйте удобную функцию render()
, чтобы отобразить шаблон. Передайте
ей переменную number
, чтобы вы могли использовать её в Twig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
// 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
внутри:
1 2
{# templates/lucky/number.html.twig #}
<h1>Ваше счастливое число - {{ number }}</h1>
Синтаксис {{ number }}
используется для отображения переменных в Twig.
Обновите ваш брайзер, чтобы получить ваше новое счастливое число!
Теперь вам может быть интересно, куда делась Панель инструментов веб-отладки: она
пропала, так как в текущем шаблоне нет тега </body>
. Вы можете добавить элемент
тела самостоятельно, или расширить base.html.twig
, который содержит все элементы
HTML по умолчанию.
В статье шаблоны, вы узнаете все о Twig: как проходить по циклу, отображать другие шаблоны и на полную использовать его мощную систему наследования шаблонов.
Проверка структуры проекта
Отличные новости! Вы уже работали внутри самых важных каталогов вашего проекта:
config/
- Содержит... конфигурацию, конечно же! Вы будете конфигурировать маршруты, сервисы и пакеты.
src/
- Здесь живет весь ваш PHP-код.
templates/
- Все ваши шаблоны Twig живут здесь.
Большинство времени, вы будете работать в src/
, templates/
или config/
.
По мере прочтения книги, вы узнаете, что можно делать в каждом из этих мест.
А что насчет других каталогов в проекте?
bin/
-
Известный файл
bin/console
живет здесь (и другие, менее важные исполнимые файлы). var/
-
Здесь хранятся автоматически созданные файлы, такие как файлы кеша
(
var/cache/
) и логи (var/log/
). vendor/
- Здесь находятся сторонние библиотеки (например, «поставщик»)! Они обычно скачиваются с помощью менеджера пакетов Composer.
public/
- Это корневой документ вашего проекта: здесь вы размещаете любые ваши публично доступные файлы.
И когда вы будете устанавливать новые пакеты, при необходимости новые каталоги будут созданы автоматически.
Что дальше?
Поздравляем! Вы уже начинаете овладевать Symfony и изучаете новый способ построения прекрасных, функциональных, быстрых и поддерживаемых приложений.
Ладно, пора закончить освоение базовых знаний, прочитав следующие статьи:
После этого, узнайте о других важных аспектах вроде сервис-контейнера, системы Form, использовании Doctrine (если вам нужно использовать базу данных) и других!
Повеселитесь!