РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
470 of 1361 menu

Атрибут MapEntity

Атрибут MapEntity вешается на параметр метода контроллера. Он автоматически находит сущность в базе данных по значению, переданному из запроса, и подставляет её в аргумент. Первым параметром передаётся класс сущности. Если сущность не найдена, Symfony выбрасывает исключение 404.

Синтаксис

#[MapEntity(class: EntityClass::class)]

Пример

Давайте создадим сущность Article с полями id и title:

<?php namespace AppEntity; use AppRepositoryArticleRepository; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: ArticleRepository::class)] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title; public function getId(): ?int { return $this->id; } public function getTitle(): string { return $this->title; } public function setTitle(string $title): static { $this->title = $title; return $this; } } ?>

Теперь повесим атрибут MapEntity на параметр метода контроллера. Symfony сам найдёт статью по id из URL:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleAttributeMapEntity; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show')] public function show(#[MapEntity(class: Article::class)] Article $article): Response { return new Response($article->getTitle()); } } ?>

Результат выполнения кода для адреса /article/1:

"article"

Пример

Давайте укажем поле, по которому искать сущность, с помощью параметра mapping:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleAttributeMapEntity; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/title/{title}', name: 'article_by_title')] public function showByTitle( #[MapEntity(class: Article::class, mapping: ['title' => 'title'])] Article $article ): Response { return new Response($article->getTitle()); } } ?>

Результат выполнения кода для адреса /article/title/hello:

"hello"

Пример

Если сущность не найдена, Symfony вернёт ошибку 404. Давайте обработаем этот случай через параметр message:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleAttributeMapEntity; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show')] public function show( #[MapEntity(class: Article::class, message: 'Article not found')] Article $article ): Response { return new Response($article->getTitle()); } } ?>

Результат выполнения кода для несуществующего адреса /article/999:

"Article not found"

Смотрите также

  • атрибут MapQueryParameter,
    который подставляет параметр из query-строки
  • атрибут MapQueryString,
    который преобразует query-строку в DTO
  • атрибут MapRequestPayload,
    который преобразует тело запроса в DTO
  • атрибут MapUploadedFile,
    который подставляет загруженный файл
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить