Symfony 3.4 - Api 其余修改值
Symfony 3.4 - Api Rest modify value
我有一个简单的问题!我不知道如何为 table 命名个人资料中的 $email 设置值,并且该个人资料 table 链接到用户 table(多对一)。所以我成功地使用 POST 方法添加了一个用户:
{
"username": "TestTest10",
"password": "TestTest10",
}
之后,我自动创建了一个链接到用户的个人资料实体,但我手动输入了个人资料的信息,因此它创建了我想要的用户,但链接到该帐户的个人资料对于任何用户都是相同的(所有有电子邮件 ok@ok.com)(像这样:
$profile = new Profile();
$profile->setEmail('ok@ok.com');
$user->setIdProfile($profile);
$em = $this->getDoctrine()->getManager();
$em->persist($profile);
$em->flush();
但我想用 POST 方法编辑它:
{
"username": "TestTest10",
"password": "TestTest10",
"email": "imanoob@symfony.com"
}
那我该怎么做呢?
我的 PostUserFunction :
/**
*
* @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('ok@ok.com');
$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(),
]
]);
}
我有一个简单的问题!我不知道如何为 table 命名个人资料中的 $email 设置值,并且该个人资料 table 链接到用户 table(多对一)。所以我成功地使用 POST 方法添加了一个用户:
{
"username": "TestTest10",
"password": "TestTest10",
}
之后,我自动创建了一个链接到用户的个人资料实体,但我手动输入了个人资料的信息,因此它创建了我想要的用户,但链接到该帐户的个人资料对于任何用户都是相同的(所有有电子邮件 ok@ok.com)(像这样:
$profile = new Profile();
$profile->setEmail('ok@ok.com');
$user->setIdProfile($profile);
$em = $this->getDoctrine()->getManager();
$em->persist($profile);
$em->flush();
但我想用 POST 方法编辑它:
{
"username": "TestTest10",
"password": "TestTest10",
"email": "imanoob@symfony.com"
}
那我该怎么做呢?
我的 PostUserFunction :
/**
*
* @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('ok@ok.com');
$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(),
]
]);
}