HardТеория2 min

Обзор экзамена Symfony

Формат экзамена, темы, проходной балл, стратегия подготовки к сертификации Symfony 7.4/8.0

Формат сертификационного экзамена

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

Параметр Значение
Количество вопросов 45
Время 90 минут (2 минуты на вопрос)
Проходной балл ~70% (около 32 правильных ответа)
Формат вопросов Множественный выбор (один или несколько правильных)
Язык Английский
Прокторинг Онлайн через веб-камеру

На экзамене: Некоторые вопросы имеют НЕСКОЛЬКО правильных ответов. Если вопрос подразумевает несколько правильных вариантов, вам нужно выбрать ВСЕ правильные -- частичный ответ считается неверным.

Темы экзамена и их вес

Symfony 7.4 / 8.0 -- общие темы

Тема Примерный вес Сложность
PHP и основы веба 5% Средняя
HTTP и HttpFoundation 10% Высокая
Routing 8% Высокая
Controllers 8% Средняя
Templating (Twig) 7% Средняя
Forms 10% Очень высокая
Validation 8% Высокая
Dependency Injection 12% Очень высокая
Security 12% Очень высокая
Console 5% Средняя
Automated Tests 5% Средняя
Miscellaneous 10% Высокая

Отличия Symfony 8.0 vs 7.4

Symfony 8.0 -- мажорный релиз, удаливший все deprecated-функции из 7.x. На экзамене 8.0 вы столкнётесь с вопросами, где старый API больше не работает.

<?php

declare(strict_types=1);

// Symfony 7.4 -- deprecated, но работает:
// EventSubscriberInterface ещё доступен

// Symfony 8.0 -- ТОЛЬКО #[AsEventListener]:
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;

#[AsEventListener(event: RequestEvent::class, priority: 10)]
final readonly class MyListener
{
    public function __invoke(RequestEvent $event): void
    {
        // Logic here
    }
}

Ключевые изменения Symfony 8.0 для экзамена:

Что убрано в 8.0 Что использовать вместо
EventSubscriberInterface #[AsEventListener] атрибут
AbstractController::getParameter() #[Autowire('%param%')]
TreeBuilder без getRootNode() Только getRootNode()
Старые Guard-аутентификаторы Новая система Authenticators
ContainerAwareCommand Обычный DI через конструктор
kernel.event_listener tag вручную #[AsEventListener] атрибут
AbstractType::setDefaultOptions() configureOptions()
Старые имена security-ролей IS_AUTHENTICATED_FULLY и т.д.

На экзамене: Если вы сдаёте экзамен на Symfony 8.0, помните -- ВСЕ deprecated-методы из 7.x удалены. Ответ, использующий deprecated API, автоматически неверен.

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

Распределение времени на экзамене

45 вопросов / 90 минут = 2 минуты на вопрос

Рекомендация:
- Первый проход (60 минут): отвечать на все вопросы, отмечая сомнительные
- Второй проход (25 минут): вернуться к отмеченным вопросам
- Третий проход (5 минут): проверить все ответы

Типичные ловушки экзамена

  1. Порядок имеет значение -- firewall rules, access_control, event listeners
  2. Default vs explicit -- что происходит, если не указать параметр
  3. Deprecation -- код работает, но deprecated (на 7.4 -- правильный ответ, на 8.0 -- нет)
  4. Несколько правильных ответов -- нужно выбрать ВСЕ
  5. Название классов -- полные имена классов (FQCN) могут быть похожи
  6. Конфигурация YAML vs PHP -- разный синтаксис, одинаковый результат

План подготовки на 4 недели

Неделя Фокус Часы
1 DI Container, HTTP, Routing 10-12
2 Security, Forms, Validation 10-12
3 Twig, Console, Events, Messenger 8-10
4 Пробные экзамены, слабые места 10-12

Ресурсы для подготовки

  1. Официальная документация -- основной источник (symfony.com/doc)
  2. Исходный код Symfony -- для понимания внутренних механизмов
  3. SymfonyCasts -- видеокурсы с разбором тем
  4. Пробные экзамены -- тренировка в формате реального экзамена

Топ ошибок на экзамене

1. Путаница между компонентами

<?php

declare(strict_types=1);

// HttpFoundation -- НЕ HttpKernel!
use Symfony\Component\HttpFoundation\Request;   // HttpFoundation
use Symfony\Component\HttpKernel\HttpKernelInterface; // HttpKernel

// Security Core -- НЕ Security HTTP!
use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; // Core
use Symfony\Component\Security\Http\Authenticator\AuthenticatorInterface; // HTTP

2. Невнимательность к формулировке

Вопрос "Какой метод вызывается ПЕРВЫМ?" и "Какой метод вызывается при УСПЕШНОЙ аутентификации?" -- это разные вопросы!

3. Незнание значений по умолчанию

# Что происходит если не указать autowire?
services:
    _defaults:
        autowire: true  # <-- Это в стандартном services.yaml
        autoconfigure: true

    # Этот сервис наследует autowire: true от _defaults
    App\Service\MyService: ~

Проверь себя

5 из 6

В стандартном services.yaml Symfony, какое значение по умолчанию имеет параметр autowire в секции _defaults?

На экзамене вопрос подразумевает несколько правильных ответов. Вы выбрали 2 из 3 правильных. Как будет засчитан ответ?

Какой из следующих классов принадлежит компоненту Security HTTP, а не Security Core?

Какая тема традиционно имеет наибольший вес на сертификационном экзамене Symfony?

Сколько вопросов содержит сертификационный экзамен Symfony и сколько времени отводится?