Форма Synfony не отправляет файл на контроллер - PullRequest
0 голосов
/ 15 марта 2019

Здравствуйте, я новичок в Symfony, и мне нужно сделать CRUD из продуктов с ним Я должен отправить эту информацию в базу данных:

  • заголовок (обязательная строка, минимальная длина: 6);
  • описание (текст, максимальная длина: 4000)
  • изображение (большой двоичный объект, требуется, максимальный размер файла: 5 МБ, только типы: JPG, PNG, GIF);
  • запас (int, обязательно);

Проблема:

  • файлы размером более 1 МБ не отправляются в форме;

набл

  • если файл имеет 1 МБ или меньше, форма отправляет их правильно.

Моя сущность:

/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product {
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $title;

    /**
     * @ORM\Column(type="text", length=4000, nullable=true)
     */
    private $description;

    /**
     * @ORM\Column(type="blob")
     */
    private $image;

    /**
     * @ORM\Column(type="integer")
     */
    private $stock;

Моя форма генерируется:

$product = new Product();

$form = $this->createFormBuilder($product)
    ->add('title',TextType::class, [
        'required' => true,
        'label' => 'Titulo: ',
        'attr' => ['minlength' => 6, 'id' => 'title_product'],
    ])
    ->add('description', TextareaType::class,[
        'required' => false,
        'label' => 'Descrição: ',
        'attr' => ['maxlength' => 4000, 'id' => 'description_product'],
    ])
    ->add('image', FileType::class, [
        'required' => true,
        'attr' => ['accept' => 'image/jpeg, image/png, image/gif'],
        'label' => 'Imagem do produto(JPG, PNG ou GIF): ',
        'help' => 'A imagem deve ter um peso maximo de 5 MBs.',
    ])
    ->add('stock', IntegerType::class, [
        'required' => true,
        'label' => 'Quantidade em estoque: ',
    ])
    ->add('save', SubmitType::class, [
        'label' => 'Criar Produto',
        'attr' => ['class' => 'btn btn-success']
    ])
    ->getForm();

$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
    $product = $form->getData();

    if ($this->validateFormProduct($product)){
        $this->createProduct($product);
        return $this->redirectToRoute('index_products');
    }
}
return $this->render('product/new.html.twig', [
    'form' => $form->createView()
]);

Функции проверки:

private function invalidImageType($img) {
    $permitedTypes = array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
    $detectedType= exif_imagetype($img);
    return !in_array($detectedType, $permitedTypes);
}

private function invalidImageSize($img) {
    return filesize($img) > 5000000;
}

private function validateFormProduct($form){
    if ($this->invalidImageType($form->getImage())){
        $this->addFlash(
            'warning',
            'Tipo de imagem invalido!'
        );
        return false;
    }

    if ($this->invalidImageSize($form->getImage())){
        $this->addFlash(
            'warning',
            'Este arquivo excede o tamanho maximo de 5mb!'
        );
        return false;
    }
    return true;
}

Функциональный индекс:

private function encriptImage($img) {
    $normalizer = new DataUriNormalizer();
    return $normalizer->normalize(new \SplFileObject($img));
}

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Вам необходимо обновить значения upload_max_filesize и post_max_size в вашем php.ini: (файл конфигурации)

; Maximum allowed size for uploaded files.
upload_max_filesize = 1M

; Must be greater than or equal to upload_max_filesize
post_max_size = 1M

См. Описание php.ini .

0 голосов
/ 15 марта 2019

Вам нужно увеличить максимальный размер загрузки в вашем php.ini файле конфигурации.
И upload_max_filesize, и post_max_size

Убедитесь, что второе больше или равно первому.

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