У меня простая проблема! Я не знаю, как установить значение $ 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






Хорошо, ребята, если у кого-то такая же проблема, ответ действительно прост, но вам нужно это сейчас: вам нужно поставить два конвертера параметров следующим образом:
* @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(),
]
]);
}