我正在尝试修改个人资料实体,但是在其中我有个人资料图像路径($ avatarPath)的变量。但是,当我尝试使用表单修改我的实体时,我被迫“上传”一个新文件以验证表单(默认情况下,我认为路径文件的值为null,所以当我接受不带图片的表单时告诉我我的表格无效并且缺少图像
所以我的目标是默认情况下在编辑表单中设置配置文件的图像,或者不将按钮上传而是使表单生效(我将上传文件放置在另一页中)
(这肯定是个白痴错误,但我看不到哪里)
我的$ avatarPath
/**
* @var string
*
* @Assert\NotBlank(message="Please enter an image")
* @Assert\Image()
* @ORM\Column(name="avatar_path", type="string", length=255, nullable=true)
*/
protected $avatarPath;
我的控制器:
/**
* Creates a new profile entity.
*
* @Route("/edit/{id}", name="profile_edit")
*/
public function editProfileAction(Request $request, User $user, Profile $profile)
{
$loggedAs = $this->getUser();
$form = $this->createForm(ProfileType::class, $profile);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/**
* @var UploadedFile $file
*/
$file = $form->get('avatar_path')->getData();
$fileName = md5(uniqid()) . '.' . $file->guessExtension();
$file->move($this->getParameter('image_directory'), $fileName);
$profile->setAvatarPath($fileName);
if ($profile->getAvatarPath() == NULL)
$profile->setAvatarPath('NULL');
$em = $this->getDoctrine()->getManager();
$em->persist($profile);
$em->flush();
$user->setIdProfile($profile);
$em2 = $this->getDoctrine()->getManager();
$em2->persist($user);
$em2->flush();
return $this->redirectToRoute('user_list');
}
return $this->render('admin/user/new_profile.html.twig', array(
'profile' => $profile,
'form' => $form->createView(),
'loggedAs' => $loggedAs,
));
}
我的表单:
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('resume')
->add('is_male')
->add('birth', BirthdayType::class, array(
'years' => range(1930,2018)
))
->add('email', EmailType::class, array(
'label' => 'form.email'
))
->add('phone')
->add('language')
->add('travel')
->add('pets')
->add('avatar_path', FileType::class, array(
'data_class' => null
))
->add('avatar_path', FileType::class, array(
'data_class' => null,
'required' => false
));
}
感谢任何尝试提供帮助的人:p
答案 0 :(得分:0)
您可以尝试将属性mapped => false
设置为表单中的avatar_path
字段。
这样做会导致symfony做两件事。第一种是在验证调用avatar_path
时在控制器中发生的格式时忽略form->isValid()
字段。其次,当您调用$form->handleRequest($request)
时,symfony不会为该字段分配任何值。
如果您选择使用mapped => false
属性,则需要在avatar_path
实体上手动设置Profile
。
以下是symfony http://symfony.com/doc/3.4/reference/forms/types/file.html的文档(这些文档适用于symfony 3.4)
希望这会有所帮助。
编辑:由于您实体中的两个@Assert
语句,我认为表单未能通过验证检查。查看代码,我认为您可以放心地删除它们,因为您已经允许属性$avatarPath
始终为空。
答案 1 :(得分:0)