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

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

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

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

Tip

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

Допустим, вы хотите создать страницу /lucky/number, которая будет генерировать счастливое (хорошо, случайное) число и отображать его. Для этого, создайте «класс контроллера» и внутри него метод «контроллера»:

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

use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    public function number()
    {
        $number = mt_rand(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, испробуйте его, перейдя по ссылке:

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

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

Вы можете узнать больше о Flex, прочитав "Using Symfony Flex to Manage Symfony Applications". Но это не обязательно: Flex автоматически работает в фоновом режиме, когда вы добавляете пакеты.

Команда bin/console

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

1
$ php bin/console

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

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

1
$ php bin/console debug:router

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

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

You'll learn about many more commands as you continue!

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

Одной из убийственных функций Symfony является Панель инструментов веб-отладки: панель, которая отображает огромное количество информации отладки внизу вашей страницы во время разработки.

Чтобы использовать панель инструментов веб-отладки, просто установите её:

1
$ composer require --dev profiler

Как только этот процесс завершится, обновите вашу страницу. Вы должны увидеть чёрную панель внизу вашей страницы. Вы узнаете больше обо всей информации, которую она содержит по ходу чтения, но не бойтесь экспериментировать: наведите на неё и нажимайте разные иконки,чтобы получить информацию о маршрутизации, производительности, логировании и пр.

Пакет profiler также является отличным примером Flex! После скачивания пакета, рецепт создал несколько файлов конфигурации, чтобы панель инструментов веб-отладки работала незамедлительно.

Отображение шаблона

Если вашему контроллеру нужно возвращать 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:

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

// ...
class LuckyController extends Controller
{
    /**
     * @Route("/lucky/number")
     */
    public function number()
    {
        $number = mt_rand(0, 100);

        return $this->render('lucky/number.html.twig', array(
            'number' => $number,
        ));
    }
}

Файлы шаблонов живут в каталоге templates/, который был создан для вас автоматически при установке Twig. Создайте новый каталог templates/lucky с новым файлом number.html.twig внутри:

1
2
3
{# 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.