不允许序列化UploadedFile(仅当达到最大大小时)

时间:2018-09-19 10:24:01

标签: php image symfony upload

大家好,我试图做一个表格来修改个人资料的图像。一切正常,但是当我放大尺寸的图像(除数据库中的图像以外,我的图像超出了我所有的图像)时,就会出现此错误:

  

不允许对“ 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;

1 个答案:

答案 0 :(得分:0)

似乎您没有在\Serializable类中实现User接口。

symfony文档中的报价:

  

在每个请求结束时,User对象被序列化到会话。在下一个请求时,它未序列化。为了帮助PHP正确执行此操作,您需要实现Serializable。

请参阅documentation,以便您更好地了解如何执行此操作。

编辑:创建新的User对象时未获得此权限的原因是该用户未登录,因此其对象未序列化。只有登录的User对象被序列化并存储到会话中,以便您的应用程序知道谁是当前登录的用户。

即使您尝试编辑与登录用户不同的用户,出于相同的原因也不会遇到该错误。