Общая картина

Начните использовать Symfony через 10 минут! Эта глава ознакомит вас с наиболее важными концептами Symfony и разъяснит, как быстро начать, путем демонстрации простого проекта в действии.

Если вы использовать веб-фреймворк ранее, то вы должны чувствовать себя как дома, используя Symfony. Если же нет, то добро пожаловать в новый способ разработки веб-приложений.

Установка Symfony

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

Понимание основ

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

При разработке приложения Symfony, ваша ответственность как разработчика - это написать код, который соотносит запрос пользователя (например, http://localhost:8000/), с источником ассоциирующимся с ним (HTML-страница Homepage).

Код, который необходимо выполнить, определяется как методы PHP-классов. Методы называются действиями, а классы - контроллерами, но на практике, большинство разработчиков используют слово контроллеры по отношению к обоим. Соотношение между запросами пользователя и этим кодом определяется с помощью конфигурации маршрутизации. А содержимое, которое видимое в браузере, обычно отображается с помощью шаблонов.

Когда вы заходите по ссылке http://localhost:8000/app/example, Symfony запускает контроллер в src/AppBundle/Controller/DefaultController.php и отображает шаблон app/Resources/views/default/index.html.twig.

В следующих разделах вы в деталях узнаете внутреннюю работу контроллеров, маршрутов и шаблонов Symfony.

Действия и контроллеры

Откройте файл src/AppBundle/Controller/DefaultController.php и вы увидите, что код следующий (пока не смотрите на конфигурацию @Route, потому что это будет объяснено в следующем разделе):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction()
    {
        return $this->render('default/index.html.twig', [
            // ...
        ]);
    }
}

В приложениях Symfony, контроллеры обычно являются PHP-классами, чьи имена имеют суффикс в виде слова Controller. В этом примере, контроллер называется Default, а PHP-класс - DefaultController.

Методы, определенные в контроллере, называются действиями, они обычно ассоциируются с одним URL приложения, и их имена имеют суффикс Action. В этом примере, контроллер Default имеет только одно действие под названием index,которое определено в методе indexAction().

Действия обычно очень короткие - около 10-15 строк кода - потому что они просто призывают другие части приложения получить или сгенерировать необходимую информацию, а потом они отображают шаблон, чтобы показать результаты пользователю.

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

Маршрутизация

Symfony прокладывает маршрут от каждрго запроса к действию, которое им управляет, путем сопоставления запрошенного URL с путями, сконфигурированными приложением. Снова откройте файл src/AppBundle/Controller/DefaultController.php и посмотрите на три строки кода над методом indexAction():

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

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction()
    {
        return $this->render('default/index.html.twig', [
            // ...
        ]);
    }
}

Эти три строки определяют конфигурацию маршрутизации с помощью аннтоации @Route(). PHP-аннтоация это удобный способ создать метод, без необходимости написания обычного PHP-кода. Обратите внимание, что блоки аннотации начинаются с /**, тогда как обычные PHP-комментарии начинаются с /*.

Первое значение @Route() определяет URL, который запустит выполнение действия. Так как вам не нужно добавлять хост вашего приложения в URL (например, http://example.com), то эти URL всегда относительны и обычно называются путями. В этом случае, путь / ссылается на домашнюю страницу приложения. Второе значение @Route() (например, name="homepage") не является обязательным и устаналивает имя этого маршрута. Сейчас это имя не требуется, но позже оно понадобится для связвания страниц.

Учитывая все это, аннотация @Route("/", name="homepage") создает новый маршрут под названием homepage, который заставляет Symfony выполнить действие index контроллера Default, когда пользователь просматривает путь / приложения.

Tip

В дополнение к PHP-аннотациям, маршруты могут быть сконфигурированы в YAML, XML или PHP-файлах, как объясняется в справочнике Маршрутизация. Эта гибкость - одна из основных особенностей Symfony, фреймворка, который никогда не навязывает вам какую-то конкретную конфигурацию.

Шаблоны

Единственным содержимым действия index является эта PHP-инструкция:

1
2
3
return $this->render('default/index.html.twig', [
    // ...
]);

Метод $this->render() - это удобный шорткат для отображения шаблона. Symfony предоставляет некоторые полезные шорткаты к любому контроллеру, наследуемому из базового класса Symfony Controller.

По умолчанию, шаблоны приложения хранятся в каталоге app/Resources/views/. Таким образом, шаблон default/index.html.twig соответствует app/Resources/views/default/index.html.twig. Откройте этот файл, и вы увидите следующий код:

1
2
3
4
5
6
7
8
{# app/Resources/views/default/index.html.twig #}
{% extends 'base.html.twig' %}

{% block body %}
    <h1>Welcome to Symfony</h1>

    {# ... #}
{% endblock %}

Этот шаблон создан в Twig, шаблонизаторе, созданном для современных PHP-приложений. Вторая часть этого туториала разъясняет, как работают шаблоны в Symfony.

Работа с окружениями

Теперь, когда у вас есть лучшее понимание того, как работает Symfony, посмотрите внимательнее на низ любой отображенной страницы Symfony. Вы должны заметить маленькую панель с логотипом Symfony. Это панель инструментов веб-отладки и это лучший друг разработчика Symfony!

../_images/web_debug_toolbar.png

Но то, что вы изначально видите - только верхушка айсберга; нажмите на любую секцию панели, чтобы открыть профилировщик и получить намного более детализированную информацию о запросе, параметрах запроса, деталей безопасности и запросах БД:

_images/quick_tour/profiler.png

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

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

Что такое окружение?

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

Когда вы переходите по URL http://localhost:8000 в вашем браузере, вы выполняете ваше приложение Symfony в окружении dev. Чтобы посетить ваше приложение в окружении prod, перейдите по URL http://localhost:8000/app.php. Если вы предпочитаете всегда показывать окружение dev в URL, вы можете посетить URL http://localhost:8000/app_dev.php.

Главным отличием между окружениями явяется то, что dev оптимизировано для того, чтобы предоставлять много информации разработчику, что означает худшую производительность приложения. В то же время prod оптимизировано для того, чтобы получать наилучшую производительность, что означает, что информация отладки отключена, так же как и панель инструментов веб-отладки.

Еще одно отличие между окружениями - это опции конфигурации, используемые для выполнения приложения. Когда вы находитесь в окружении dev, Symfony загружает файл конфигурации app/config/config_dev.yml. Когда вы находитесь в окружении prod - Symfony загружает файл app/config/config_prod.yml.

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

1
2
3
4
5
6
7
# app/config/config_dev.yml
imports:
    - { resource: config.yml }

web_profiler:
    toolbar: true
    intercept_redirects: false

В этом примере, файл конфигурации config_dev.yml импортирует общий файл config.yml, а потом перезаписывает любую существующую конфигурацию панели инструментов веб-отладки со своими собственными настройками.

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

Заключение

Поздравляем! Вы впервые попробовали код Symfony. Это было не так уж и сложно, правда? Вам предстоит еще многое исследовать, но вы должны уже видеть, как Symfony помогает выполнять веб-сайты быстрее и лучше. Если вы рветесь узнать больше о Symfony, ныряйте в следующий раздел: "Вид".

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