#php #forms #image #file #symfony
#php #формы #изображение #файл #symfony
Вопрос:
Здравствуйте, я новичок в symfony, и мне приходится создавать с ним кучу продуктов. Я должен отправить эту информацию в базу данных:
- заголовок (строка, обязательная, минимальная длина: 6);
- описание (текст, максимальная длина: 4000)
- изображение (большой двоичный объект, обязательно, максимальный размер файла: 5 мб, только типы: JPG, PNG, GIF);
- stock (int, обязательно);
Проблема:
- файлы размером более 1 мб не отправляются формой;
Obs:
- если размер файла составляет 1 мб или меньше, форма отправляет его правильно.
Моя сущность:
/**
* @ORMEntity(repositoryClass="AppRepositoryProductRepository")
*/
class Product {
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMColumn(type="string", length=255)
*/
private $title;
/**
* @ORMColumn(type="text", length=4000, nullable=true)
*/
private $description;
/**
* @ORMColumn(type="blob")
*/
private $image;
/**
* @ORMColumn(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() amp;amp; $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));
}
Комментарии:
1. Это Symfony, а не Synfony 🙂
Ответ №1:
Вам нужно увеличить максимальный размер загрузки в вашем php.ini
файле конфигурации.
Оба upload_max_filesize
и post_max_size
Убедитесь, что вторая форма больше первой или равна ей.
Ответ №2:
Вам необходимо обновить значения 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.