当前位置: 首页 > 知识库问答 >
问题:

Symfony2实现修补方法以更新用户文件

红经亘
2023-03-14

如何使用补丁方法更新FOS用户的详细信息。所以当我在Json中传递部分细节时,只更新这些细节。

用户实体

  /**
   * @ORM\Entity
   * @ORM\Table(name="user")
   */
  abstract class User extends BaseUser
  {
      /**
       * @var int
       *
       * @ORM\Column(name="id", type="integer")
       * @ORM\Id
       * @ORM\GeneratedValue(strategy="AUTO")
       */
      protected $id;

      /**
       * @var string]
       * @ORM\Column(name="first_name", type="string", length=255, nullable=true)
       */
      private $firstName;

      /**
       * @var string
       * @ORM\Column(name="last_name", type="string", length=255, nullable=true)
       */
      private $lastName;

     // getters and setters are here
      }
  {"firstName": "John"}
     /**
      * @Route("/update", name="api_user_update")
      * @Security("has_role('ROLE_USER')")
      * @Method("PATCH")
      */
     public function updateAction(Request $request){
         $jsonContent = $request->getContent();
         $params = json_decode($jsonContent);
         $em = $this->getDoctrine()->getEntityManager();
         $response = new JsonResponse();

         $user = $this->getUser();

         // do something to update user details

         $this->get('fos_user.user_manager')->updateUser($user);

         $em->persist($user);
         $em->flush();

         $response->setContent([
        "status" => "user ". $user->getUsername() ." is updated"
         ]);

         return $response;
     }
    public function updateAction(Request $request){
    $em = $this->getDoctrine()->getEntityManager();
    $response = new JsonResponse();

    $user = $this->getUser();
    $editForm = $this->createForm('CoreBundle\Form\UserType', $user);

    $requestData = $request->getContent();
    $requestData = json_encode($requestData, true);

    $editForm->submit($requestData, false);

    $this->get('fos_user.user_manager')->updateUser($user);

    $em->persist($user);
    $em->flush();

    $response->setContent([
    "status" => "user ". $user->getUsername() ." is updated"
     ]);

    return $response;
}

我的实体没有更新。我做错了什么?

共有1个答案

宰父夕
2023-03-14

您需要为部分更新准备并创建usertype表单。

然后,在处理提交的表单时,需要向控制器中表单的submit方法调用传递一个false$ClearMissing选项:

$form->submit($request, false);

由于该选项,表单组件将只更新从请求传递的字段。

$em->flush();
{"firstName": "John"}
public function getBlockPrefix()
{
    return "";
}

您还可以使用漂亮而强大的https://github.com/friendsofsymfony/fosrestbundle

 类似资料:
  • 我有一个包含一些图像实体,我想使用HttpPatch方法更新它。 要创建新样式,我使用以下方法: 现在我正在尝试创建一个方法来使用HttpPatch方法更新这个样式。我试过了,但是没有选择在Swagger上上传文件: 这是StyleFiles类: 我正在考虑制作两个单独的endpoint,一个用于更新文件,另一个用于更新实体本身。但我不想那样做。

  • 我想向我的API发送一个REST补丁请求,只更新一些字段,而不是整个RequestBody。有人能帮我解决这个问题吗

  • 我有一个项目,我正在使用Spring MVC Jackson构建REST服务。假设我有以下java实体 有时候,我只是想更新布尔值,我不认为发送带有大字符串的整个对象只是为了更新一个简单的布尔值是个好主意。所以,我考虑过使用PATCH HTTP方法只发送需要更新的字段。所以,我在我的控制器中声明了以下方法: 问题是:我如何知道哪些字段需要更新?例如,如果客户端只想更新布尔值,我将得到一个带有空“a

  • 我正在尝试将配置文件信息编辑/更新到我的用户表中。 我的想法是让经过身份验证的用户能够在用户表中编辑自己的配置文件。 在注册过程中,您只需要填写几个特定的项目(用户名、姓名、姓氏、电子邮件、密码),但我还向用户表中添加了几个额外的列(城市、国家、电话、twitter、facebook)。 我有一个profile用户页面(route='/profile'),其中显示了所有信息。当然,注册过程中不需要

  • 本文向大家介绍利用jquery实现实时更新歌词的方法,包括了利用jquery实现实时更新歌词的方法的使用技巧和注意事项,需要的朋友参考一下 前言 最近自己写了个移动端音乐播放器,用了很多框架,也踩了很多坑,感觉比较复杂的就是计算歌词实时播放了,所以想着大概给整理了一下,分享出来,有问题的话朋友们可以指出,有需要的朋友们也可以学习学习。 布局 (歌词都是后台数据获取,方便理解我把所有歌词都一一列出来

  • Http补丁方法被认为是非幂等的, HTTP修补程序请求方法对资源应用部分修改。 HTTP PUT方法只允许完全替换文档。与PUT不同,补丁不是幂等的,这意味着连续的相同补丁请求可能会产生不同的效果。 但可以以幂等方式(MDN)实现修补程序: 因此,我上面写的幂等补丁请求将不会被优化。(据我所知,HTTP标准规定补丁是非幂等的,但并不禁止它实现为幂等的)。 因为HTTP标准认为PUT是幂等的。不是