Symfony 3.4 - значение изменения Api Rest

У меня простая проблема! Я не знаю, как установить значение $ email, которое находится в таблице с именем profile, и эта таблица профиля связана с таблицей пользователей (многие к одному). Итак, мне удалось добавить пользователя с помощью метода POST:

{
"username": "TestTest10",
"password": "TestTest10",
}

После этого я автоматически создаю объект профиля, связанный с пользователем, но я помещаю информацию профиля вручную, поэтому он создает пользователя, которого я хочу, но профиль, связанный с этой учетной записью, всегда одинаков для любого пользователя (у всех есть электронная почта ok @ ok.com) (вот так:

$profile = new Profile();
$profile->setEmail('[email protected]');
$user->setIdProfile($profile);
$em = $this->getDoctrine()->getManager();
$em->persist($profile);
$em->flush();

Но я хочу отредактировать его с помощью этого метода POST:

{
"username": "TestTest10",
"password": "TestTest10",
"email": "[email protected]"
}

Так как я могу это сделать?

Моя функция PostUser:

/**
 *
 * @Rest\Post(
 *     path = "/users",
 *     name = "api_users_add"
 * )
 * @Rest\View(StatusCode=201, serializerGroups = {"user_detail"})
 * @ParamConverter(
 *     "user",
 *     converter = "fos_rest.request_body",
 *     options = {"deserializationContent" = {"groups" = {"Deserialize"}}}
 * )
 */
public function postUserAction(Request $request, User $user, ConstraintViolationListInterface $violations)
{
    if (count($violations) > 0) {
        return new JsonResponse([
            'success' => "false",
        ]);
    }

    $profile = new Profile();

    $profile->setEmail('[email protected]');
    $profile->setLastConnexion(new \DateTime('now'));
    $profile->setCreatedAccount(new \DateTime('now'));
    $profile->setBirth(new \DateTime('now'));

    $user->setIdProfile($profile);

    $em = $this->getDoctrine()->getManager();
    $em->persist($profile);
    $em->flush();

    $this->encodePassword($user);
    $user->setRoles([User::ROLE_USER]);

    $this->persistUser($user);

    return new JsonResponse([
        'success' => "true",
        'data' => [
            'Id' => $user->getId(),
            'username' => $user->getUsername(),
            'email' => $profile->getEmail(),
        ]
    ]);
}

Я могу получить профиль в параметре:

    public function postUserAction(Request $request, User $user, Profile $profile, ConstraintViolationListInterface $violations)

Но я не знаю, как вставить два paramConverter:

* @ParamConverter(
 *     "user",
 *     converter = "fos_rest.request_body",
 *     options = {"deserializationContent" = {"groups" = {"Deserialize"}}},
 * )

Спасибо за все, что попытаюсь ответить: p

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
150
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, ребята, если у кого-то такая же проблема, ответ действительно прост, но вам нужно это сейчас: вам нужно поставить два конвертера параметров следующим образом:

* @Rest\View(StatusCode=201, serializerGroups = {"user_detail"})
 * @ParamConverter(
 *     "user",
 *     converter = "fos_rest.request_body",
 *     options = {"deserializationContent" = {"groups" = {"Deserialize"}}},
 * )
 * @ParamConverter(
 *     "profile",
 *     converter = "fos_rest.request_body",
 *     options = {"deserializationContent" = {"groups" = {"Deserialize"}}},
 * )

Весь код выглядит так:

/**
 *
 * @Rest\Post(
 *     path = "/users",
 *     name = "api_users_add"
 * )
 * @Rest\View(StatusCode=201, serializerGroups = {"user_detail"})
 * @ParamConverter(
 *     "user",
 *     converter = "fos_rest.request_body",
 *     options = {"deserializationContent" = {"groups" = {"Deserialize"}}},
 * )
 * @ParamConverter(
 *     "profile",
 *     converter = "fos_rest.request_body",
 *     options = {"deserializationContent" = {"groups" = {"Deserialize"}}},
 * )
 */
public function postUserAction(Request $request, User $user, Profile $profile, ConstraintViolationListInterface $violations)
{
    if (count($violations) > 0) {
        return new JsonResponse([
            'success' => "false",
        ]);
    }
    $profile->setLastConnexion(new \DateTime('now'));
    $profile->setCreatedAccount(new \DateTime('now'));
    $profile->setBirth(new \DateTime('now'));

    $user->setIdProfile($profile);

    $em = $this->getDoctrine()->getManager();
    $em->persist($profile);
    $em->flush();

    $this->encodePassword($user);
    $user->setRoles([User::ROLE_USER]);

    $this->persistUser($user);

    return new JsonResponse([
        'success' => "true",
        'data' => [
            'Id' => $user->getId(),
            'username' => $user->getUsername(),
            'email' => $profile->getEmail(),
        ]
    ]);
}

Другие вопросы по теме