Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 210новых вакансий за сутки·93 612вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 266
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

DevOps и инфраструктура

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

Аналитика и данные

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

Другие направления

  • Проджект-менеджер620
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме SymfonyВсе вопросы
SymfonyJuniorТеория

Как работает service container (контейнер dependency injection) в Symfony?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Service Container в Symfony автоматически создаёт объекты-сервисы и разрешает их зависимости (autowiring) по типам конструктора; конфигурируется в services.yaml, где задаются параметры, алиасы интерфейсов и теги; все сервисы приватны по умолчанию и создаются в единственном экземпляре.

Автоматическая конфигурация (autowiring)

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

<?php
namespace App\Service;

use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;

class OrderService
{
    // Symfony сам найдёт и передаст EntityManager и Logger
    public function __construct(
        private readonly EntityManagerInterface $entityManager,
        private readonly LoggerInterface $logger,
    ) {}

    public function createOrder(array $items): Order
    {
        $this->logger->info('Creating order', ['items_count' => count($items)]);
        $order = new Order($items);
        $this->entityManager->persist($order);
        $this->entityManager->flush();
        return $order;
    }
}

Service Container (DI-контейнер) в Symfony

Service Container — это объект, который создаёт и хранит сервисы (объекты). Вместо ручного вызова new MyService(new Dependency()) контейнер сам знает, как собрать нужный объект, включая все зависимости. Это реализация паттерна Dependency Injection.

Конфигурация сервисов в services.yaml

# config/services.yaml
services:
    # Дефолтная конфигурация для всех сервисов
    _defaults:
        autowire: true      # автоматическое разрешение зависимостей
        autoconfigure: true # автоматическое добавление тегов (EventSubscriber, Command и т.д.)

    # Регистрация всего из src/ как сервисы
    App\:
        resource: '../src/'
        exclude:
            - '../src/DependencyInjection/'
            - '../src/Entity/'
            - '../src/Kernel.php'

    # Ручная настройка конкретного сервиса
    App\Service\PaymentService:
        arguments:
            $apiKey: '%env(PAYMENT_API_KEY)%'
            $timeout: 30

    # Алиас интерфейса на конкретную реализацию
    App\Repository\UserRepositoryInterface: '@App\Repository\DoctrineUserRepository'

    # Именованный сервис для внедрения
    mailer.with_logging:
        class: App\Service\LoggingMailer
        arguments:
            $mailer: '@mailer'
            $logger: '@monolog.logger.mailer'

Параметры контейнера

# config/services.yaml
parameters:
    app.admin_email: 'admin@example.com'
    app.upload_dir: '%kernel.project_dir%/public/uploads'
    app.supported_locales: ['en', 'ru', 'de']

services:
    App\Service\UploadService:
        arguments:
            $uploadDir: '%app.upload_dir%'
            $allowedLocales: '%app.supported_locales%'
<?php
// Или получить параметр прямо в классе через атрибут
use Symfony\Component\DependencyInjection\Attribute\Autowire;

class UploadService
{
    public function __construct(
        #[Autowire('%app.upload_dir%')]
        private readonly string $uploadDir,

        #[Autowire(env: 'PAYMENT_API_KEY')]
        private readonly string $apiKey,
    ) {}
}

Публичные и приватные сервисы

По умолчанию все сервисы приватные — их нельзя получить через $container->get(). Публичными делают только те, которые нужны вне контейнера:

services:
    App\Service\SpecialService:
        public: true  # теперь доступен через $container->get()

Отладка контейнера

# Список всех сервисов
php bin/console debug:container

# Найти конкретный сервис
php bin/console debug:container mailer

# Посмотреть, как разрешается тип
php bin/console debug:autowiring MailerInterface

# Список всех параметров
php bin/console debug:container --parameters

Внедрение коллекций сервисов

<?php
use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;

class NotificationManager
{
    /** @param iterable<NotificationChannelInterface> $channels */
    public function __construct(
        #[TaggedIterator('app.notification_channel')]
        private readonly iterable $channels,
    ) {}

    public function notify(string $message): void
    {
        foreach ($this->channels as $channel) {
            $channel->send($message);
        }
    }
}

Подводные камни

  • Сервисы создаются лениво и только один раз (singleton by default) — не храните изменяемое состояние в сервисах, если к ним обращаются несколько раз за запрос.
  • При использовании autoconfigure: true классы, реализующие EventSubscriberInterface, автоматически получают тег kernel.event_subscriber — не добавляйте тег вручную, иначе листенер зарегистрируется дважды.
  • Приватные сервисы нельзя передавать через ServiceLocator или получать из тестового контейнера без public: true — в тестах это часто становится сюрпризом.
  • Опечатка в имени параметра (одинарные vs двойные знаки процента) приведёт к %env(FOO)% трактовке как строки, а не переменной окружения.
  • Circular dependency между сервисами вызывает исключение при компиляции — разрывайте цикл через ServiceLocator или ленивую инъекцию.
  • Контейнер компилируется и кэшируется; изменения в services.yaml без cache:clear в production не применятся.

Частые вопросы на собеседовании

  • Как Symfony обрабатывает защиту от CSRF?
  • Как устроен Dependency Injection container compile pass?
  • В каких backend-проектах Symfony является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Что такое Symfony и каковы его основные преимущества?

Типичные ошибки

  • Сводить service container к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: Symfony 7/8 строит request lifecycle вокруг HttpKernel, events, routing, controller resolver и response listeners.
  • Не отделять validation, authorization, transaction boundary и business logic.

Что проверяет интервьюер

  • Объясняет service container через конкретную точку lifecycle в Symfony.
  • Приводит корректный минимальный пример без вымышленных методов или callbacks.
  • Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.

Как вы знаете этот вопрос?

Проверить себя по теме Symfony →

Источники

  • https://symfony.com/doc/current/service_container.html
  • https://symfony.com/doc/current/index.html
←Предыдущий вопросКак устроен Dependency Injection container compile pass?Следующий вопрос→В каких backend-проектах Symfony является сильным выбором, а где лучше выбрать более простой или другой стек?

Связанные темы

SymfonyBackend-Engineeringsymfony-ecosystem