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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python16 036
  • Облачные технологии13 168
  • QA вакансии3 433
  • Backend вакансии1 983
  • Инженер данных1 650
  • Продакт-менеджер1 134

Разработка

  • Android1 792
  • iOS1 660
  • AI вакансии924
  • Fullstack вакансии835
  • Frontend вакансии702
  • Mobile вакансии36

По стеку

  • Go8 538
  • Java5 808
  • Node.js1 826
  • Kotlin1 514
  • .NET1 433
  • Rust1 416
  • PHP591
  • C#500
  • C++449

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

  • Kubernetes7 301
  • DevOps вакансии5 341
  • Linux-инфраструктура5 289
  • Terraform / IaC4 012
  • CI/CD2 192
  • Мониторинг и Observability1 734
  • SRE546
  • Кибербезопасность376

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

  • Data Scientist1 026
  • Бизнес-аналитик862
  • Аналитик данных820
  • Системный аналитик134

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

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

По регионам

  • Вакансии в США44 370
  • Вакансии в Европе21 211
  • Вакансии в Канаде4 414
  • Работа в России3 877

По формату

  • Удалённые вакансии73 121
  • Релокация в США44 024
  • Гибридная работа10 789
  • Офисная работа6 889

По уровню

  • Senior вакансии39 966
  • Middle вакансии19 556
  • Junior вакансии6 496

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

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

Что такое Symfony controller и что он делает?

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

Symfony-контроллер — callable, принимающий Request и возвращающий Response; фреймворк внедряет зависимости через DI, разрешает аргументы через ArgumentResolver и обрабатывает результат в kernel.view.

Базовый пример

<?php
// src/Controller/UserController.php
namespace App\Controller;

use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;

class UserController extends AbstractController
{
    #[Route('/users/{id}', name: 'user_show', methods: ['GET'])]
    public function show(User $user): JsonResponse
    {
        // EntityValueResolver автоматически загружает User по {id}
        return $this->json([
            'id'    => $user->getId(),
            'email' => $user->getEmail(),
        ]);
    }
}

Атрибут #[Route] регистрирует маршрут прямо на методе — альтернатива YAML/XML-конфигурации. AbstractController::json() использует Symfony Serializer (или json_encode как fallback) и устанавливает Content-Type: application/json.

Что такое Symfony Controller

Контроллер в Symfony — это PHP-класс (или callable), который принимает объект Request и возвращает объект Response. Фреймворк не навязывает базовый класс: можно наследоваться от AbstractController для удобных хелперов, а можно писать plain PHP-класс — главное соответствие контракту callable(Request): Response.

Место в Request Lifecycle

HttpKernel обрабатывает запрос в несколько этапов:

  • kernel.request — firewall, locale listener, router читает URL и сохраняет атрибуты в Request::$attributes.
  • kernel.controller — ControllerResolver разрешает callable по атрибуту _controller; ArgumentResolver инжектирует аргументы (сервисы из DI, route-параметры, тело запроса через #[MapRequestPayload]).
  • Контроллер выполняется и возвращает Response или любое значение.
  • kernel.view — если вернули не Response (например, массив или DTO), ViewListener сериализует его.
  • kernel.response — финальные модификации (кеш-заголовки, CORS и т.д.).

Инъекция зависимостей в контроллер

<?php
use App\Repository\UserRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class UserController extends AbstractController
{
    public function __construct(
        private readonly UserRepository $users,
    ) {}

    #[Route('/users', methods: ['GET'])]
    public function index(Request $request): Response
    {
        $page  = $request->query->getInt('page', 1);
        $users = $this->users->findPaginated($page, limit: 20);

        return $this->json($users);
    }
}

Symfony DI автоматически внедряет UserRepository через constructor autowiring — никакого new или Service Locator не нужно.

Валидация и обработка ошибок

<?php
use App\Dto\CreateUserDto;
use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;
use Symfony\Component\HttpFoundation\JsonResponse;

#[Route('/users', methods: ['POST'])]
public function create(
    #[MapRequestPayload] CreateUserDto $dto,
): JsonResponse {
    // $dto уже провалидирован через Validator + Symfony Constraints
    // При ошибке Symfony автоматически вернёт 422 Unprocessable Entity
    $user = $this->users->createFromDto($dto);
    return $this->json($user, status: 201);
}

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

  • Толстый контроллер — бизнес-логика в контроллере затрудняет тестирование; выносите её в сервисы или command handlers.
  • EntityValueResolver и 404 — если сущность не найдена, Symfony бросает NotFoundHttpException; убедитесь, что это нужное поведение, иначе используйте Repository вручную.
  • Порядок маршрутов — при YAML/XML-конфигурации маршрут /users/me должен стоять перед /users/{id}, иначе «me» будет интерпретировано как UUID/id.
  • Сериализация циклических ссылок — $this->json() упадёт с CircularReferenceException при двусторонних связях Doctrine без @Ignore или группы сериализации.
  • Отсутствие Response-типа — возврат массива без kernel.view listener вызовет LogicException; убедитесь, что установлен TwigBundle или SensioFrameworkExtraBundle.
  • Тестирование — используйте WebTestCase::createClient() и $client->request('GET', '/users/1'); не мокайте сам контроллер, мокайте зависимости.
  • AbstractController vs plain class — AbstractController предоставляет $this->json(), $this->render(), $this->getUser(), но тянет зависимость от FrameworkBundle; для библиотечного кода лучше plain class.

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

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

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

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

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

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

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

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

Источники

  • https://symfony.com/doc/current/controller.html
  • https://symfony.com/doc/current/index.html
←Предыдущий вопросВ чём разница между `findOneBy()` и использованием DQL (Doctrine Query Language)?Следующий вопрос→В чём разница между `EntityRepository` и пользовательским репозиторием в Doctrine?

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

SymfonyBackend-Engineeringsymfony-ecosystem