Symfony 4 загрузка нескольких файлов и изменение максимального размера - PullRequest
1 голос
/ 29 апреля 2020

Привет сообществу,

Я создаю страницу portofolio, где загружаются изображения, я создал класс Portofolio, где я сохраняю коллекцию изображений класса.

class PortofolioPage


/**
* @ORM\OneToMany(targetEntity="App\Entity\Image", mappedBy="natureGallery", cascade={"persist"})
 */
private $natureGallery;

и мой тип формы:

use Symfony\Component\Validator\Constraints\Image;
use Symfony\Component\Form\Extension\Core\Type\FileType;

->add('natureGallery', FileType::class, [
            'multiple' => true,
            'label' => 'form.natureGallery',
            'mapped' => false,
            'required' => false,
            'constraints' => [
                new Image([
                    'maxSize' => '5M',
                ])
            ],
        ])

без секции ограничений, я могу загружать изображения, но у меня есть maxSize 2M, если секция противоположностей активна, я получаю сообщение об ошибке «Это значение должно иметь тип string» ( я думаю, что не нравится, когда я создаю новый образ, он получает массив), и если я деактивирую несколько кадров, я не могу загрузить более 2 млн.

Я уже изменил свой php. ini, post_max_size = 50M и upload_max_filesize = 50M и следуйте документации в https://symfony.com/doc/4.4/controller/upload_file.html и проверили symfonycast, но решение ускользает от меня.

Спасибо за ваше время и удачное кодирование

1 Ответ

0 голосов
/ 01 мая 2020

Для загрузки нескольких файлов вы должны заключить ограничение Image в ограничение All. Это потому, что представленное значение будет набором объектов ( ссылка ). Если вы переключите множественную опцию на false, вы увидите, что ваше ограничение работает ... На самом деле оно не работает для вас, потому что вы обрабатываете отправленные данные как сбор в вашем контроллере.

Итак, для добавления нескольких загрузок use Symfony\Component\Validator\Constraints\All; и измените раздел ограничений на:

new All([
    new Image([
        'maxSize' => '5M'
    ])
])

или для одиночной загрузки измените ваш контроллер (например):

if (is_array($natureFiles)) {
   ...
} else {
    $filename = $fileUploader->uploadImage($natureFiles);

    $image = new Image();
    $image->setName($filename);
    $image->setUrl($this->getParameter('upload_directory').'natureGallery/'.$filename);

    $portofolio->addNatureGallery($image);
}
...