Сериализация UploadedFile не допускается (только при достижении максимального размера) - PullRequest
0 голосов
/ 19 сентября 2018

Привет, ребята. Я пытаюсь сделать форму, чтобы изменить изображение профиля.Все работают хорошо, но когда я помещаю изображение большого размера (больше, чем я, за исключением базы данных), у меня появляется эта ошибка:

Сериализация '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 голосов
/ 19 сентября 2018

Похоже, вы не реализовали интерфейс \Serializable в своем классе User.

Цитирование из документации Symfony:

В конце каждого запроса объект User сериализуется в сеанс.По следующему запросу он не сериализован.Чтобы помочь PHP сделать это правильно, вам нужно реализовать Serializable.

Пожалуйста, обратитесь к документации , чтобы вы лучше понимали, как это сделать.

EDIT : причина, по которой вы не получаете это при создании нового объекта User, заключается в том, что этот пользователь не вошел в систему, поэтому его объект не сериализован.Только зарегистрированный объект User сериализуется и сохраняется в сеансе, так что ваше приложение знает, кто является текущим вошедшим пользователем.

Даже если вы пытались редактировать пользователя, отличного от того, который являетсяВы не должны сталкиваться с этой ошибкой по тем же причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...