大家好,我试图做一个表格来修改个人资料的图像。一切正常,但是当我放大尺寸的图像(除数据库中的图像以外,我的图像超出了我所有的图像)时,就会出现此错误:
不允许对“ Symfony \ Component \ HttpFoundation \ File \ UploadedFile”进行序列化
我不知道为什么约束不起作用...(在我创建配置文件时有效,但在我修改配置文件时无效)对于所有尝试回答的问题
我将代码放在此处:(控制器)
$loggedAs = $this->getUser();
$avatar_profile = $loggedAs->getAvatarPath();
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(ProfileModificationType::class, $loggedAs);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/**
* @var UploadedFile $file
*/
$file = $form->get('avatarPath')->getData();
if ($file != NULL) {
$fileName = md5(uniqid()) . '.' . $file->guessExtension();
$file->move(
$this->getParameter('image_directory'), $fileName
);
$loggedAs->setAvatarPath($fileName);
} else {
$loggedAs->setAvatarPath($avatar_profile);
}
$loggedAs->setSalt(md5(uniqid()));
$loggedAs->setPassword($encoder->encodePassword($loggedAs, $loggedAs->getPassword()));
$em->flush();
$this->get('session')->getFlashBag()->add('success', "Votre compte a été modifié");
表格:
->add('avatarPath', FileType::class, array(
'data_class' => null,
'required' => false,
'label' => 'Avatar',
'constraints' => array(
new Assert\Image(array(
'maxHeight' => 600,
'maxWidth' => 600,
'maxSize' => 1000000,
'maxHeightMessage' => 'Longeur maximale de 600Px',
'maxWidthMessage' => 'Largeur maximale de 600Px',
'maxSizeMessage' => 'Taille maximale de 1Mo',
))),
'invalid_message' => 'Cette valeur est invalide',
));
以及我的实体资料(约束):
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
$metadata->addPropertyConstraint('avatarPath', new Assert\Image(array(
'maxHeight' => 600,
'maxWidth' => 600,
'maxSize' => 1000000,
'maxHeightMessage' => 'Longeur maximale de 600Px',
'maxWidthMessage' => 'Largeur maximale de 600Px',
'maxSizeMessage' => 'Taille maximale de 1Mo',
)));
}
和我的实体
/**
* @var string
*
* @ORM\Column(name="avatar_path", type="string", length=255, nullable=false)
*/
private $avatarPath;
答案 0 :(得分:0)
似乎您没有在\Serializable
类中实现User
接口。
symfony文档中的报价:
在每个请求结束时,User对象被序列化到会话。在下一个请求时,它未序列化。为了帮助PHP正确执行此操作,您需要实现Serializable。
请参阅documentation,以便您更好地了解如何执行此操作。
编辑:创建新的User
对象时未获得此权限的原因是该用户未登录,因此其对象未序列化。只有登录的User
对象被序列化并存储到会话中,以便您的应用程序知道谁是当前登录的用户。
即使您尝试编辑与登录用户不同的用户,出于相同的原因也不会遇到该错误。