Создайте вашу первую страницу в Symfony

Дата обновления перевода 2024-07-31

Создайте вашу первую страницу в Symfony

Создание новой страницы – не важно, будет это страница HTML или JSON – это простой процесс, состоящий из 2 шагов:

  1. Создайте маршрут: Маршрут – это URL (например, /about) вашей страницы и указание на контроллер;
  2. Создайте контроллер: Контроллер – это РНР функция, написанная вами, которая создаёт страницу. Вы берете входящую информацию запроса, и используете её для создания объекта 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.

Если вы увидите отображенное счастливо число – поздравляем! Однако перед тем, как бежать играть в лотерею, посмотрите, как это работает. Помните два шага по созданию страницы?

  1. Создайте контроллер и метод: Это функция, в которой вы строите страницу и возвращаете объект Response. Вы узнаете больше о контроллерах в разделе о них, включая то, как возвращать ответы JSON.
  2. Создайте маршрут: В 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. Обновите ваш брайзер, чтобы получить ваше новое счастливое число!

http://localhost:8000/lucky/number

Теперь вам может быть интересно, куда делась Панель инструментов веб-отладки: она пропала, так как в текущем шаблоне нет тега </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 (если вам нужно использовать базу данных) и других!

Повеселитесь!