【发布时间】:2019-07-29 07:06:15
【问题描述】:
我是 Symfony 4 的初学者,我正在开发一个 API Rest。我想创建一个可以处理许多更新案例的 PUT 资源。
在我的例子中,我有一个拥有许多属性的用户,但我将举一个具有 3 个属性的示例以保持简单:
User {
username,
email,
password
}
可以调用我的 PUT 资源来更新用户名、更新电子邮件或更新密码。例如,要更新用户名,我的 API 的用户将发送一个只有用户名的 PUT 请求:
{
username: "New username"
}
邮箱和密码也一样,他只会发送他要更改的属性。
我的问题出在我的控制器上,我必须这样做:
/**
* @Rest\Put("/user/{id}")
* @param Request $request
* @return View
*/
public function putUserRequest(Request $request)
{
$userId = $request->get('id');
$user = $this->doctrine->getRepository(User::class)->findOneBy('id' => $userId);
$userFromRequest = $this->serializer->deserialize($request->getContent(), User::class, 'json');
if ($userFromRequest->getUsername() != NULL) {
$user->setUsername($userFromRequest->getUsername())
}
if ($userFromRequest->getEmail() != NULL) {
$user->setEmail($userFromRequest->getEmail())
}
if ($userFromRequest->getPassword() != NULL) {
$user->setPassword($userFromRequest->getPassword())
}
// ...
}
在我的示例中,我只有 3 个属性,但想象一下当我有 30 个属性时。
在 Symfony 3 中,我使用表单来验证/保存我的数据:
$form->submit($request->request->all(), $clearMissing);
$clearMissing 为 false 以保留我的 API 用户未提供的数据。我找不到使用序列化程序的方法,但我想我做错了。
谢谢。
【问题讨论】:
标签: api symfony symfony4 put serialization