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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 748
  • Облачные технологии6 616
  • QA вакансии2 169
  • Android1 320
  • Инженер данных872
  • Продакт-менеджер302

Разработка

  • iOS1 232
  • Backend вакансии1 204
  • AI вакансии543
  • Fullstack вакансии497
  • Frontend вакансии417
  • Mobile вакансии28

По стеку

  • Go5 212
  • Java3 116
  • Kotlin1 090
  • Node.js995
  • Rust845
  • .NET661
  • PHP320
  • C++271
  • C#208

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

  • Kubernetes3 913
  • Linux-инфраструктура2 852
  • DevOps вакансии2 678
  • Terraform / IaC2 167
  • Мониторинг и Observability1 066
  • CI/CD923
  • SRE301
  • Кибербезопасность26

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

  • Аналитик данных533
  • Data Scientist436
  • Бизнес-аналитик400
  • Системный аналитик68

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

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

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

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

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

Как работает маршрутизация (routing) в Symfony и какими способами можно определять маршруты?

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

Маршруты в Symfony определяются через PHP-атрибуты #[Route] (рекомендуется), YAML или PHP-файл конфигурации; роутер сопоставляет URL с контроллером по пути, HTTP-методу и requirements-паттернам, а URL генерируется через generateUrl() или Twig-функцию path().

1. PHP-атрибуты (рекомендуется с Symfony 6)

<?php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

#[Route('/blog', name: 'blog_')]
class BlogController extends AbstractController
{
    // GET /blog/
    #[Route('/', name: 'index')]
    public function index(): Response
    {
        return $this->render('blog/index.html.twig');
    }

    // GET /blog/42 или /blog/my-post — параметр с типом и дефолтом
    #[Route('/{slug}', name: 'show', requirements: ['slug' => '[a-z0-9-]+'])]
    public function show(string $slug): Response
    {
        return $this->render('blog/show.html.twig', ['slug' => $slug]);
    }

    // POST /blog/ — ограничение по методу
    #[Route('/', name: 'create', methods: ['POST'])]
    public function create(): Response
    {
        // ...
        return $this->redirectToRoute('blog_index');
    }

    // /blog/{id} где id = целое число
    #[Route('/{id}', name: 'delete', requirements: ['id' => '\d+'], methods: ['DELETE'])]
    public function delete(int $id): Response
    {
        return new Response(null, Response::HTTP_NO_CONTENT);
    }
}

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

Роутинг — процесс сопоставления входящего HTTP-запроса с конкретным контроллером и его методом. Symfony использует компонент Routing, который работает через RouterListener на событии kernel.request.

Способы определения маршрутов

2. YAML-конфигурация

# config/routes.yaml
blog_index:
    path: /blog/
    controller: App\Controller\BlogController::index
    methods: [GET]

blog_show:
    path: /blog/{slug}
    controller: App\Controller\BlogController::show
    requirements:
        slug: '[a-z0-9-]+'
    defaults:
        slug: 'latest'

# Импорт маршрутов из контроллеров
blog:
    resource: '../src/Controller/BlogController.php'
    type: attribute
    prefix: /blog

3. PHP-файл (routes.php)

<?php
// config/routes.php
use App\Controller\BlogController;
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

return function (RoutingConfigurator $routes): void {
    $routes->add('blog_index', '/blog/')
        ->controller([BlogController::class, 'index'])
        ->methods(['GET']);

    $routes->add('blog_show', '/blog/{slug}')
        ->controller([BlogController::class, 'show'])
        ->requirements(['slug' => '[a-z0-9-]+'])
        ->defaults(['slug' => 'latest']);
};

Генерация URL

<?php
// В контроллере
$url = $this->generateUrl('blog_show', ['slug' => 'hello-world']);
// Результат: /blog/hello-world

// Абсолютный URL
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
$absoluteUrl = $this->generateUrl('blog_show', ['slug' => 'hello'], UrlGeneratorInterface::ABSOLUTE_URL);
// Результат: https://example.com/blog/hello
// В Twig-шаблоне
<a href="{{ path('blog_show', {slug: 'hello-world'}) }}">Читать</a>
<a href="{{ url('blog_show', {slug: 'hello-world'}) }}">Абсолютная ссылка</a>

Отладка маршрутов

# Список всех маршрутов
php bin/console debug:router

# Детали конкретного маршрута
php bin/console debug:router blog_show

# Проверить, какой маршрут соответствует URL
php bin/console router:match /blog/hello-world

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

  • Порядок маршрутов имеет значение: первый подходящий маршрут побеждает. Маршрут /blog/new должен быть выше /blog/{slug}, иначе «new» попадёт в параметр slug.
  • Требования (requirements) для параметров — это регулярные выражения; забытые границы \d+ совпадут с «123abc» частично — используйте \d+ только если Symfony сам добавляет ^ и $.
  • При импорте маршрутов из аннотаций/атрибутов через resource с указанием директории кэш компилируется один раз — после добавления нового контроллера нужен cache:clear в production.
  • Метод generateUrl() бросает исключение если маршрут не найден по имени или не хватает обязательных параметров — всегда проверяйте имена маршрутов при переименовании.
  • Параметры маршрута с одинаковым именем в родительском #[Route] и дочернем #[Route] вызывают конфликт — не дублируйте параметры в префиксах контроллера.
  • Маршруты с методом DELETE/PUT недоступны из браузерных форм HTML; используйте скрытое поле _method и middleware HttpMethodOverride или делайте это через JavaScript fetch.

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

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

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

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

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

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

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

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

Источники

  • https://symfony.com/doc/current/routing.html
  • https://symfony.com/doc/current/index.html
←Предыдущий вопросПредставьте, endpoint на Symfony иногда отвечает за секунды вместо миллисекунд. Как вы будете искать причину?Следующий вопрос→Что такое компонент HttpClient в Symfony и как его использовать?

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

SymfonyBackend-Engineeringsymfony-ecosystem