Дата обновления перевода 2021-06-02

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

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

  1. Создайте маршрут: Маршрут – это URL (например, /about) вашей страницы и указание на контроллер;
  2. Создайте контроллер: Контроллер – это РНР функция, написанная вами, которая создаёт страницу. Вы берете входящую информацию запроса, и используете её для создания объекта Symfony Response, который может содержать HTML содержимое, JSON строку, или даже бинарный файл вроде изображения или PDF.

Screencast

Предпочитаете видео-уроки? Посмотрите сериал Восхитительная разработка с Symfony.

See also

Symfony охватывает жизненный цикл HTTP запрос-ответ. Чтобы узнать больше см. Symfony and HTTP Fundamentals.

Cоздание страницы: маршрут и контроллер

Tip

Перед тем, как продолжать, убедитесь в том, что вы прочли главу про установку, и можете вызвать приложение Symfony из своего браузера.

Допустим, вы хотите создать страницу /lucky/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() выполнялся, когда пользователь переходит поссылке. Эта ассоциация определяется путём создания маршрута в файле config/routes.yaml:

1
2
3
4
5
6
# config/routes.yaml

# имя маршрута "app_lucky_number" пока не важно
app_lucky_number:
    path: /lucky/number
    controller: App\Controller\LuckyController::number

Вот и всё! Если вы используете веб-сервер Symfony, испробуйте его, перейдя по ссылке: http://localhost:8000/lucky/number

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

  1. Создайте маршрут: В config/routes.yaml, маршрут определяет URL к вашей странице (path), и какой controller вызывать. Вы узнаете больше о маршрутизации в разделе о ней, включая то, как cоздавать переменные URL;
  2. Создайте контроллер: Это функция, в которой вы строите страницу и возвращаете объект Response. Вы узнаете больше о контроллерах в разделе о них, включая то, как возвращать ответы JSON.

Маршруты аннотаций

Вместо того, чтобы определять ваш маршрут на YAML, Symfony также позволяет вам использовать маршруты аннотаций. Чтобы сделать это, установите пакет аннотаций:

1
$ composer require annotations

Теперь вы можете добавлять ваш маршрут прямо над контроллером:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// src/Controller/LuckyController.php

// ...
+ use Symfony\Component\Routing\Annotation\Route;

class LuckyController
{
+     /**
+      * @Route("/lucky/number")
+      */
    public function number()
    {
        // это выглядит точно так же
    }
}

Вот и всё! Страница http://localhost:8000/lucky/number будет работать точно так же, как и раньше! Аннотации являются рекомендоанным способом конфигурации маршрутов.

Автоустановка рецептов с помощью Symfony Flex

Возможно вы не заметили, но когда вы выполнили composer require annotations, произошли две особенные вещи, обе благодаря мощному плагину Composer по имени Flex.

Во-первых, annotations - это не настоящее имя пакета: это дополнительное имя (т.е. ярлык), который Flex разрешает до sensio/framework-extra-bundle.

Во-вторых, после того, как был скачан этот пакет, Flex выполнил рецепт, который является набором автоматических инструкций, которые сообщают Symfony, как интегрировать внешний пакет. Рецепты Flex существуют для многих пакетов (см. symfony.sh) и имеют возможность делать многое, вроде добавления файлов конфигурации, создания каталогов, обновления .gitignore и добавления новой конфигурации в ваш файл .env. Flex автоматизирует установку пакетов, чтобы вы могли вернуться к написанию кода.

Команда bin/console

Ваш проект уже имеет в себе мощный инструмент отладки: команду bin/console. Попробуйте выполнить её:

1
$ php bin/console

Вы должны увидеть список команд, которые могут дать вам информацию об отладке, помочь сгенерировать код, сгенерировать миграции DB и многое другое. Когда вы будете устанавливать больше пакетов, вы будете видеть больше команд.

Чтобы получить список всех маршрутов в вашей системе, используйте команду debug:router:

1
$ php bin/console debug:router

Сейчас вы должны увидеть ваш маршрут app_lucky_number сверху:

Имя Метод Схема Хост Путь
app_lucky_number любой любой любой /lucky/number

Вы также увидите маршруты отладки под app_lucky_number – больше о маршрутах отладки будет в следующем разделе.

Вы узнаете еще о многих командах дальше!

Панель инструментов веб-отладки: отладка мечты

Одной из потрясающих функция 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\Controller;

- class LuckyController
+ class LuckyController extends Controller
{
    // ...
}

Теперь, используйте удобную функцию 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 внутри:

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 и изучаете новый способ построения прекрасных, функциональных, быстрых и поддерживаемых приложений.

Ладно, пора закончить освоение базовых знаний, прочитав следующие статьи:

После этого, узнайте о других важных аспектах вроде сервис-контейнера, системы форм, использовании Doctrine (если вам нужно использовать базу данных) и других!

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

Углубленное изучение основ HTTP и фреймворка

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.