【问题标题】:How to properply update an entity which contains an Image path?如何正确更新包含图像路径的实体?
【发布时间】:2020-03-05 09:31:25
【问题描述】:

我有一个用于注册和编辑用户信息的表格。此表单包含我在其上放置@Assert\Image 的个人资料图片属性。

我通过注册表单成功创建了一个新用户,但是当我尝试编辑用户信息时(使用PATCH 方法,只是为了更新需要更新的内容)我遇到了一个错误,显示“文件无法被发现”的消息。

我想这是因为存储在数据库中的路径是一个字符串,而我的@Assert\Image 想要一张图片。

我不确定我应该如何管理这种更新。

当我dd()$user 提交后,我看到profilePicture 属性仍然包含保存在数据库中的路径。

这是我关于表单处理的功能:

public function myProfile(Request $request)
    {
        $user = $this->getUser();
        $form = $this->createForm(UserFormType::class, $user, ['method' => 'PATCH']);

        if ($request->isMethod('PATCH')){

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

            if ($form->isSubmitted() && $form->isValid()) {
                //...
            }

        }
        //if no request just display the page
        return $this->render('connected/myProfile.html.twig', [
            'user' => $user,
            'userProfileForm' => $form->createView()
        ]);
    }

【问题讨论】:

  • 当您更新您的用户时,我猜您没有为个人资料图片字段提供任何值?如果是这样,您应该尝试将'data' => null 附加到UserFormType 类中的个人资料图片字段选项中。这样,存储的值将不会提供给您的表单。此外,您可能应该定义两个表单验证组(用于添加/编辑用户),如果您有一些约束(例如 @NotBlank),您只想申请添加表单。 More details here

标签: symfony symfony-forms symfony-validator


【解决方案1】:

验证器将检查您的对象是否包含图像,而当您更新对象时,情况似乎并非如此。 一种解决方法是使用 group validation 为具有断言 Image 的属性定义一个特定组,并在方法 getGroupSequence 中,如果您正在创建(id == null)或者如果属性已设置。

【讨论】:

  • 更新过程中可以包含图片,取决于用户选择更新或不更新他的头像。
猜你喜欢
  • 2018-06-30
  • 2019-05-22
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2016-02-01
  • 1970-01-01
相关资源
最近更新 更多