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

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

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

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

Tip

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

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

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

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

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

        return new Response(
            '<html><body>Счастливое число: ' . $number . '</body></html>'
        );
    }
}

Перед тем, как углубляться в это, попробуйте! Если вы используете внутренний веб-сервер РНР, перейдите по ссылке:

Tip

Если вы используете встроенный веб-сервер PHP, вы можете опустить часть URL app_dev.php.

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

  1. Создайте маршрут: @Route над numberAction() называется аннотацией, которая определяет паттерн URL. Вы узнаете больше об этом в главе о маршрутизации, включая информацию о том, как создавать переменные URL;
  2. Создайте контроллер: Метод под аннотацией – numberAction(), называется контроллером. Это функция, в которой вы создаете страницу и в итоге возвращаете объект Response. Вы узнаете больше о контроллерах в разделе о них, включая информацию о том, как возращать ответы JSON.

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

Если ваша страница работает, то вы также должны видеть панель в нижней части браузера. Это называется панель инструментов отладки (Web Debug Toolbar): и это ваш лучший друг при отладке. Вы узнаете больше об информации в ней позднее, но можете свободно поэкспериментировать: наведите на иконку и нажмите на нее, чтобы получить информацию о маршрутизации, производительности, логах и т.д.

Отображение шаблона (используя сервис-контейнер)

Если вашему контроллеру нужно возвращать HTML, то вы, скорее всего, захотите использовать шаблон. К счастью, в Symfony есть шаблонизатор Twig – простой, многофункциональный и, на самом деле, классный.

Для начала, убедитесь в том, что LuckyController расширяет базовый класс Symfony Controller:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// src/AppBundle/Controller/LuckyController.php

// ...
// --> добавьте новое выражение
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class LuckyController extends Controller
{
    // ...
}

Теперь используйте удобную функцию render() для отображения шаблона. Передайте ей нашу переменную number, чтобы мы могли отобразить следующее:

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

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

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

Теперь, наконец, файлы шаблонов должны находиться в папке app/Resources/views. Создайте новую папку app/Resources/views/lucky с файлом number.html.twig в ней:

1
2
3
{# app/Resources/views/lucky/number.html.twig #}

<h1>Your lucky number is {{ number }}</h1>

Синтаксис {{ number }} используется для того, чтобы напечатать переменные в Twig. Обновите ваш браузер, чтобы получить ваше новое счастливое число!

В статье Создание и использование шаблонов, вы узнаете все о Twig: как проходить по циклу, отображать другие шаблоны и на полную использовать его мощную систему наследования шаблонов.

Проверка структуры проекта

Отличные новости! Вы уже работали внутри двух самых важных каталогов вашего проекта:

app/
Содержит такие вещи как конфигурацию и шаблоны. Фактически, всё, что не является PHP-кодом, находится здесь.
src/
Здесь живет ваш PHP-код.

99% времени, вы будете работать в src/ (PHP-файлы) или app/ (все остальное). По мере прочтения книги, вы узнаете, что можно делать в каждом из этих мест.

А что насчет других каталогов в проекте?

bin/
Известный файл bin/console живет здесь (и другие, менее важные исполнимые файлы).
tests/
Автоматические тесты (например, юнит-тесты) находятся здесь.
var/
Здесь хранятся автоматически созданные файлы, такие как файлы кеша (var/cache/), логи (var/logs/) и сессии (var/sessions/).
vendor/
Здесь находятся сторонние библиотеки (например, «поставщик»)! Они обычно скачиваются с помощью менеджера пакетов Composer.
web/
Это корневой документ вашего проекта, который содержит публично доступные файлы (например, CSS, JS и изображения).

Пакеты и конфигурация

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

Пакеты зарегистрированы в вашем файле app/AppKernel.php (редкий PHP-файл в каталоге app/) и каждый из их даёт вам больше инструментов, иногда называемых сервисами:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            // ...
        );
        // ...

        return $bundles;
    }

    // ...
}

Например, пакет TwigBundle отвечает за добавление в ваше приложение инструмента Twig!

В конечном счете, вы будете скачивать все больше сторонних пакетов, чтобы получить больше инструментов. Представьте себе пакет, который поможет вам создавать списки с разбивкой по страницам. А такой пакет существует!

Вы можете управлять поведением ваших пакетов с помощью файла app/config/config.yml. Этот файл, а также другие детали вроде окружений и параметров, обсуждаются в статье Конфигурация.

Что дальше?

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

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

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

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

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

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