Symfony — PHP-фреймворк: Что Это? полное руководство на 2023 год

Время на прочтение: 9 минут(ы)

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

Содержание
  1. Что такое Symfony?
  2. Преимущества использования Symfony
  3. Быстрая разработка
  4. Гибкая структура
  5. Интуитивные шаблоны
  6. Безопасность
  7. Возможности тестирования/отладки
  8. Интероперабельность
  9. Поддержка корпораций
  10. Сообщество
  11. Архитектура Symfony и компоненты
  12. HTTP Foundation
  13. Event Dispatcher
  14. Routing
  15. Dependency Injection
  16. Security
  17. HttpKernel
  18. Console
  19. Form
  20. Validation
  21. Translation
  22. Templating с Twig
  23. Cache
  24. Serializer
  25. Service Container
  26. Как работает Symfony
  27. Настройка проекта Symfony
  28. Установка Symfony CLI
  29. Создание нового проекта
  30. Структура каталогов
  31. Установка зависимостей
  32. Запуск локального веб-сервера
  33. Symfony Flex и рецепты
  34. Бандлы Symfony
  35. Настройка приложений Symfony
  36. Контроллеры Symfony
  37. Шаблонизация в Symfony с Twig
  38. Обработка запросов в Symfony
  39. Генерация ответов
  40. Маршрутизация в Symfony
  41. Базы данных и ORM Doctrine
  42. Формы в Symfony
  43. Безопасность и аутентификация
  44. Кэширование в Symfony
  45. Логирование в Symfony
  46. Автоматизированное тестирование
  47. Модульное тестирование
  48. Функциональное тестирование
  49. Веб-тестирование
  50. Отладка приложений Symfony
  51. Деплой приложений Symfony
  52. Почему Symfony — отличный фреймворк
  53. Дальнейшее изучение Symfony
  54. Заключение
  55. Курсы по программированию

Что такое Symfony?

Symfony — это бесплатный open source веб-фреймворк на PHP, который следует архитектурному шаблону MVC (Model-View-Controller). С момента первоначального релиза в 2005 году он эволюционировал до предоставления стабильного, зрелого фундамента для создания веб-приложений enterprise-уровня.

Несколько ключевых фактов о Symfony:

  • Создан французским разработчиком Фабиеном Потансье в 2005 году.
  • Построен на PHP с использованием современных стандартов кодирования и лучших практик.
  • Использует компонентную структуру, которая способствует повторному использованию и интероперабельности.
  • Предоставляет встроенные инструменты и утилиты для распространенных задач веб-разработки.
  • Поддерживает интеграцию с библиотеками типа Doctrine ORM.
  • Выпущен под гибкой лицензией MIT.
  • Поддерживается большим сообществом разработчиков по всему миру.

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

Преимущества использования Symfony

Symfony предлагает широкий спектр преимуществ для разработчиков, создающих веб-приложения:

Быстрая разработка

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

Гибкая структура

Повторно используемые компоненты и система бандлов позволяют структурировать приложения в соответствии с пользовательскими требованиями.

Интуитивные шаблоны

Шаблонизатор Twig обеспечивает интуитивный и минималистичный синтаксис для создания шаблонов.

Безопасность

Symfony имеет встроенную защиту от многих уязвимостей и рисков безопасности веб-приложений.

Возможности тестирования/отладки

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

Интероперабельность

Компоненты используют стандартные инструменты и протоколы как HTTP, HTML5 и REST, позволяя интеграцию с библиотеками сторонних производителей.

Поддержка корпораций

Symfony поддерживается целой организацией, обеспечивающей долгосрочную поддержку и полезную документацию.

Сообщество

Как один из самых популярных PHP-фреймворков, существует огромное количество учебных ресурсов, форумов, руководств и документации по Symfony.

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

Архитектура Symfony и компоненты

Symfony следует модульной структуре, основанной на разделенных компонентах, каждый из которых выполняет определенную роль в общем фреймворке:

HTTP Foundation

Содержит классы для обработки HTTP-запросов, ответов и URI.

Event Dispatcher

Предоставляет инструменты для управления событиями и слушателями в коде PHP.

Routing

Сопоставляет URL с контроллерами, определяя доступные маршруты сайта.

Dependency Injection

Структурированный паттерн для передачи зависимостей в классы и методы.

Security

Защищает приложения от распространенных угроз типа XSS, clickjacking и др.

HttpKernel

Запускает приложения Symfony путем инициализации бандлов и основного окружения.

Console

Позволяет создавать команды CLI для административных задач и утилит.

Form

Помогает создавать, отображать и проверять веб-формы с защитой CSRF.

Validation

Предоставляет инструменты для проверки данных, включая поддержку ограничений и групп.

Translation

Добавляет поддержку мультиязычности в приложениях.

Templating с Twig

Шаблонизатор Twig для экранирования вывода и отделения бизнес-логики от представления.

Cache

Кэширует данные, страницы и другие компоненты для повышения производительности.

Serializer

Преобразует объекты в разные форматы данных, такие как JSON и XML.

Service Container

Центральный реестр для доступа к сервисам, определенным в приложении Symfony.

Эти автономные компоненты могут использоваться по отдельности или вместе по мере необходимости в рамках проекта, позволяя гибкие настройки.

Как работает Symfony

Когда запрос попадает в веб-приложение Symfony, выполняется ряд шагов для преобразования запроса в ответ:

  1. Маршрутизация — Маршрутизатор Symfony сопоставляет входящий URL с контроллером/методом, который будет обрабатывать запрос.
  2. Диспетчер — Диспетчер событий уведомляет настроенных слушателей о входящем запросе.
  3. Контроллер — Контроллер использует параметры запроса для формирования нужного ответа.
  4. Шаблоны — Шаблоны Twig генерируют HTML, связанный с ответом.
  5. Дополнительная обработка — Объект ответа проходит через дополнительную обработку, такую как HTTP кэширование.
  6. Ответ — К ответу применяются заголовки и он отправляется обратно клиенту.

Symfony упрощает быструю обработку всех входящих запросов, следуя этому стандартизированному конвейеру. Модульные компоненты вызывают друг друга при необходимости для формирования ответов.

Настройка проекта Symfony

Symfony предоставляет инструмент командной строки под названием Symfony CLI, который упрощает создание и запуск новых проектов Symfony:

Установка Symfony CLI

Сначала установите двоичный файл Symfony глобально в системе, если его еще нет:

Copy code$ curl -sS https://get.symfony.com/cli/installer | bash

Или установите через менеджер пакетов, такой как apt, yum и т.д.

Создание нового проекта

Используйте команду symfony new и укажите имя проекта:

Copy code$ symfony new my_project

Это создаст новое каркасное приложение Symfony со стандартными файлами и каталогами.

Структура каталогов

Приложения Symfony придерживаются следующей общей структуры каталогов:

  • /src — Все PHP классы располагаются здесь
  • /var — Кэши, логи и другие переменные хранилища
  • /config — Конфигурационные файлы сайта
  • /templates — Файлы шаблонов Twig
  • /public — Файлы доступные в вебе, как CSS, изображения и главный контроллер

Установка зависимостей

Используйте Composer для установки необходимых PHP-пакетов:

Copy code$ composer install

Запуск локального веб-сервера

Используйте Symfony CLI для запуска локального веб-сервера для разработки:

Copy code$ symfony server:start

Теперь новое приложение Symfony доступно по адресу http://localhost:8000.

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

Symfony Flex и рецепты

Symfony Flex — это плагин Composer, который революционизирует управление приложениями Symfony за счет автоматизации распространенных задач, таких как:

  • Загрузка бандлов
  • Настройка окружений
  • Генерация шаблонного кода
  • Запуск команд консоли

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

Например, вы можете запустить:

Copy code$ composer require admin

Flex автоматически загрузит пакеты для интерфейса администратора, обновит файлы .env, создаст маршруты и многое другое.

Flex с рецептами экономит огромное количество времени и упрощает поддержку приложений Symfony на протяжении их жизненного цикла.

Бандлы Symfony

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

Бандлы обычно предоставляют такой функционал как управление пользователями, поддержка API, редакторы CMS и многое другое. Некоторые бандлы, включенные в Symfony:

  • FrameworkBundle — Предоставляет базовое ядро и структуру, такую как каталоги, маршрутизация и конфиги.
  • TwigBundle — Интегрирует и управляет шаблонизатором Twig.
  • SecurityBundle — Обрабатывает аутентификацию, авторизацию и другие аспекты безопасности.
  • MonologBundle — Предоставляет логирование событий, ошибок и уведомлений.
  • WebProfilerBundle — Добавляет отладочную панель и профайлер для отладки приложений.

Также существуют сотни сторонних бандлов, созданных сообществом Symfony, доступных на сайтах вроде KnpBundles.com и Packagist. Популярные примеры:

  • FOSUserBundle — Управление учетными записями пользователей и аутентификация.
  • EasyAdminBundle — Автогенерируемые страницы административного интерфейса.
  • LiipImagineBundle — Помощь в обработке и кэшировании изображений.

Бандлы следуют соглашениям об именовании вроде AcmeFooBarBundle и размещают файлы внутри /src/Acme/FooBarBundle.

Бандлы позволяют расширять приложения Symfony, инкапсулируя функционал в переносимые, разделённые пакеты.

Настройка приложений Symfony

Symfony предоставляет настройку при помощи структурированных файлов YAML, XML или PHP, которые определяют поведение приложения:

Установка окружения

Файл .env устанавливает окружение, такое как dev, prod или staging.

Конфигурация приложения

config/packages/*.yaml содержит настройки приложения, такие как маршруты, сервисы и параметры.

Конфигурация бандла

Каждый бандл также может иметь папку Resources/config/ со своей конфигурацией.

Сервисы

Сервисы для внедрения зависимостей определяются в config/services.yaml.

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

Определения маршрутов находятся в config/routes.yaml, которые сопоставляют контроллеры с URL.

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

Контроллеры Symfony

Контроллеры — это PHP-классы, которые содержат методы, выполняемые в ответ на входящие запросы к маршрутам. Они обрабатывают данные запроса и формируют ответы.

Например:

php Copy code// src/Controllers/LuckyController.php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class LuckyController  
{
  public function number()
  {
    $number = rand(0, 100);

    return new Response(
      '<html><body>Lucky number: '.$number.'</body></html>' 
    );
  }
}

Контроллеры взаимодействуют с сервисами, отправляют данные в шаблоны, вызывают репозитории для получения данных из баз данных и в конечном итоге возвращают объекты Response.

Несколько маршрутов могут указывать на разные методы одного контроллера, позволяя повторное использование.

Шаблонизация в Symfony с Twig

Twig — это быстрый и гибкий движок шаблонов для рендеринга представлений в Symfony. Шаблоны Twig содержат статический HTML и динамические теги Twig:

twig Copy code{# templates/lucky/number.html.twig #}

<h1>Ваше счастливое число - {{ number }}</h1>

Тег {{ number }} выводит переменную number, переданную из контроллера.

Twig предоставляет сокращения для распространенных задач, таких как экранирование вывода, наследование, циклы и многое другое. Шаблоны могут использовать директивы, фильтры, функции, макросы и другие мощные инструменты.

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

Обработка запросов в Symfony

Когда запрос поступает в приложение Symfony, фреймворк генерирует объект Request, содержащий всю информацию о запросе клиента.

Основные методы Request:

getQueryString() — Возвращает любые GET-параметры.

requestUri() — Получает запрошенный URI.

getMethod() — Возвращает HTTP-метод запроса, например GET, POST.

getContentType() — Извлекает MIME-тип запроса.

Это позволяет получить доступ к переменным запроса и данным, таким как значения $_POST.

Контроллеры также могут создавать объекты Request для перенаправления запросов на другие контроллеры для дальнейшей обработки.

Генерация ответов

Контроллеры возвращают объекты Response, которые содержат содержимое ответа вместе с заголовками и куки.

Распространенные методы Response:

setContent() — Устанавливает тело ответа.

headers->set() — Устанавливает заголовок ответа, например Content-Type.

setStatusCode() — Устанавливает HTTP код ответа, например 200, 404, 500 и т.д.

sendHeaders() — Отправляет HTTP-заголовки клиенту.

sendContent() — Выводит содержимое ответа в браузер.

setCookie() — Добавляет куку в ответ.

Обрабатывая как запрос, так и ответ, Symfony обеспечивает полный контроль над жизненным циклом каждого HTTP запроса/ответа.

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

Маршрутизация связывает конкретные URI с классами/методами контроллеров для обработки запросов:

yaml Copy code# config/routes.yaml

lucky_number:
  path: /lucky/number
  controller: App\Controller\LuckyController::number

Это сопоставляет /lucky/number с методом number(), показанным ранее.

Маршрутизатор Symfony поддерживает:

  • Обязательные/необязательные плейсхолдеры вроде {id}
  • Требования регулярных выражений
  • Требования HTTP-метода
  • Требования хоста и схемы
  • Пользовательские имена маршрутов и условия

Сложные наборы маршрутов можно организовать в отдельные файлы и префиксы маршрутов.

Маршрутизатор полностью определяет все доступные для приложения маршруты и логику контроллеров.

Базы данных и ORM Doctrine

Symfony интегрируется с Doctrine ORM для обеспечения абстракции базы данных и упрощения сопоставления PHP-объектов с реляционными данными.

Doctrine требует определения классов сущностей, которые представляют таблицы:

php Copy codenamespace App\Entity;

use Doctrine\ORM\Mapping as ORM; 

/** 
 * @ORM\Entity
*/

class Article {

  /**
   * @ORM\Id
   * @ORM\GeneratedValue
   * @ORM\Column(type="integer")  
  */
  private $id;

  /**
  * @ORM\Column(type="string")
  */
  private $title;

  /**
  * @ORM\Column(type="text")
  */
  private $content;

}

Doctrine автоматически выполняет преобразование экземпляров этого класса в таблицу articles в БД и обратно.

Doctrine также предоставляет query builder, систему событий, кэширование, инструменты схемы БД и многое другое для упрощения работы с базами данных.

Формы в Symfony

Формы обрабатывают ввод данных пользователями. Symfony интегрирует компонент Form для определения форм с помощью DSL:

php Copy code$form = $this->createFormBuilder()
  ->add('task', TextType::class) 
  ->add('dueDate', DateType::class)
  ->add('save', SubmitType::class)
  ->getForm();
  
return $this->render('form.html.twig', ['form' => $form]);

Темы форм позволяют настроить отображение форм с помощью CSS/JS. Ограничения проверяют данные полей. События форм обрабатывают отправку.

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

Безопасность и аутентификация

Компонент Security в Symfony обрабатывает типичные потребности безопасности:

  • Аутентификация — Проверка учетных данных пользователя при входе.
  • Авторизация — Ограничение доступа к ресурсам на основе ролей и разрешений.
  • Защита от атак — Защита от уязвимостей вроде XSS, CSRF и т.д.
  • Шифрование паролей — Безопасное хранение паролей с помощью алгоритмов хеширования.

Конфигурации безопасности определяют файрволы, пользователей, роли, пароли и правила принудительного обеспечения авторизации.

Ограничение доступа и защита приложений Symfony выполняется легко благодаря мощному компоненту Security.

Кэширование в Symfony

Для повышения производительности Symfony позволяет кэшировать полные страницы, фрагменты, маршруты, результаты Doctrine и многое другое с помощью тегов и времени жизни.

Встроенные кэш-провайдеры включают:

  • APCu Cache — Хранит кэш в локальной памяти.
  • Redis Cache — Хранит кэш в Redis.

Настройте кэширование в config/packages/framework.yaml:

yaml Copy code# config/packages/framework.yaml
framework:
   cache:
      app: cache.adapter.apcu

Затем кэшируйте блоки контента:

php Copy code

$cache = $this->get('cache.app')

// выполнить запрос только при промахе кэша
if (!$result = $cache->get('cache_key')) {

// выполнить запрос
$result = ...

// сохранить в кэше
$cache->set('cache_key', $result, 3600);
}

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

Логирование в Symfony

Логирование предоставляет информацию о работе приложения и помогает в отладке. Symfony поддерживает множество уровней логирования:

  • DEBUG — Подробные технические логи.
  • INFO — Интересные события вроде входа пользователя.
  • NOTICE — Нормальные, но важные события.
  • WARNING — Исключительные ситуации, не вызывающие ошибок.
  • ERROR — Ошибки во время выполнения для расследования.
  • CRITICAL — Критическое состояние, например неработающее приложение.
  • ALERT — Необходимо немедленное действие.
  • EMERGENCY — Самый высокий уровень оповещения.

Запись сообщений лога с помощью сервиса logger:

php Copy code$this->logger->error('Ошибка входа для '.$email);

Monolog предоставляет расширенные возможности логирования для приложений Symfony out-of-the-box.

Автоматизированное тестирование

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

Модульное тестирование

Изолированные тесты отдельных классов с помощью PHPUnit и мок-объектов.

Функциональное тестирование

Тесты основных функций в изоляции с помощью браузера Symfony.

Веб-тестирование

Автоматизация взаимодействия с полноценным приложением как конечный пользователь с помощью Panther.

Тесты можно запускать перед коммитами, чтобы поддерживать качество через:

Copy code$ ./bin/phpunit
$ ./bin/behat

Тестовые случаи располагаются в папке /tests, организованные по типам — unit, functional или browser.

Тщательное тестирование позволяет рефакторить и развивать кодбазы Symfony с уверенностью.

Отладка приложений Symfony

Когда неизбежно возникают баги, Symfony предоставляет несколько вариантов быстрой отладки:

Symfony Profiler

Панель инструментов, отображающая внутренние данные запроса вроде информации о производительности, переменных POST, запросов в БД, логов и т.д.

Web Debug Toolbar

Похожа на Profiler, но содержит больше информации о маршрутах, используемых шаблонах Twig, токенах безопасности и окружении приложения.

Dump Server

Выводит детали любой переменной прямо в браузере.

Файлы логов

Файлы логов активности, предупреждений и ошибок в var/log/ для ретроспективной отладки.

PHPStorm + Xdebug

Пошаговая отладка прямо из IDE с использованием точек останова и инспекции переменных.

Обработка ошибок

Пользовательская обработка исключений с гранулярными уровнями через Monolog.

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

Деплой приложений Symfony

Для развертывания Symfony в продакшене:

  1. Выполнить composer install --no-dev --optimize-autoloader, чтобы не разворачивать зависимости разработки.
  2. Установить переменные окружения на сервере путем экспорта переменных .env.
  3. Развернуть код на сервер через Git, FTP, rsync и т.д. Лучше используя CI/CD конвейер.
  4. Настроить веб-сервер как Nginx или Apache с папкой public/ в качестве корневой.
  5. Очистить кэш и прогреть приложение, посетив маршрут развертывания.
  6. Запустить миграции БД, если были изменения моделей.
  7. Очистить все кэшированные файлы в каталоге /var в случае проблем.

С хорошими практиками развертывания продвижение приложений из разработки в продакшен становится прямолинейным. Используйте PM2 или Supervisor для управления долгоживущими процессами.

Почему Symfony — отличный фреймворк

В заключение, вот ключевые причины, почему Symfony доверяют для создания надежных приложений крупными предприятиями по всему миру:

  • Огромный выбор разделенных компонентов для быстрой разработки.
  • Стабильная долгосрочная поддержка от SensioLabs.
  • Простое юнит и поведенческое тестирование out-of-the-box.
  • Обширная экосистема сторонних бандлов.
  • Высокая производительность благодаря возможностям HTTP-кэширования.
  • Строгое соблюдение стандартов кодирования и лучших практик.
  • Отличная документация и помощь сообщества.
  • Готовность к предприятию для защиты и оптимизации сложных приложений.
  • Фреймворк, созданный экспертами-разработчиками на PHP.

Структурированная архитектура, обширный набор инструментов, надежность и скорость Symfony делают его идеальным выбором для требовательных проектов.

Дальнейшее изучение Symfony

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

  • Официальная документация — Крайне подробная документация от Symfony.
  • Блог Symfony — Регулярные посты с новостями, руководствами, советами и триками.
  • YouTube канал Symfony — Краткие видео по аспектам Symfony.
  • Демо-приложение Symfony — Примеры лучших практик в действии.
  • Книги Symfony на Leanpub — Углубленные руководства от известных авторов.
  • Сертификация Symfony — Подтверждение экспертизы в Symfony.
  • Сообщество Symfony в Slack — Чат с другими разработчиками Symfony.

Инвестируя время в изучение лучших практик Symfony, вы сможете в полной мере использовать его возможности для потрясающих приложений.

Заключение

Symfony — зрелый, широко используемый PHP-фреймворк, отлично подходящий для веб-разработки enterprise-уровня. Основные выводы:

  • Модульная архитектура на основе разделенных компонентов.
  • Упакованные функции для быстрой разработки.
  • Надежная защита, тестирование и отладка.
  • Интуитивные шаблоны с Twig.
  • Интеграция с ORM Doctrine.
  • Обширная экосистема бандлов.
  • Отличная производительность и эргономика разработки.

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

Реклама. Информация о рекламодателе по ссылкам в статье и в карточке курса.

Добавить комментарий