@zzmaster

Symfony 6: как передать json объект параметром в контроллер?

Есть такой контроллер

Как сделать, чтобы json объект (который является массивом), получаемый через $_POST оказался передан в параметр контроллеру?

class CreateTagsController extends AbstractController 
{

    /**
    * @var NewTag[] $tags
    */
    public array $tags = [];

    public function __invoke(array $tags, ValidateDtoAndFlattenErrors $validator, CreateTags $creator): JsonResponse
    {
        dd($tags);
    }
}


и ему передается json строка в POST, такого типа

[
		'tags' => [
				[
					'id' => 1,
					'ru' => [
						'name' => 'name1',
						'metaTitle' => 'title1'
					]
				],
...

ну, то есть в виде json. Как сделать, чтоб массив по ключу tags оказался в параметре $tags контроллера?
Роут на данный момент такой
tags_add:
  path: /tags/add
  controller: App\Tag\Controller\CreateTagsController
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Omas
Вы можете для этого создать собственный резолвер аргумента контроллера, вот документация по которой вы сможете понять как это делается: https://symfony.com/doc/current/controller/value_r...

Рекомендую так же посмотреть в сторону того чтобы из request json content десериализовывать сразу в нужный вам DTO как в этом примере https://symfony.com/blog/new-in-symfony-5-4-serial.... Удобно десериализовывать и валидировать сразу в этом аргумент ресолвере а в контроллере иметь сразу готовую и отвалидрованную DTO.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы