@brud
специально для самых нежных и трепетных

Почему в Symfony не срабатывает валидация файла?

Добрый день.
Имеется класс формы, в котором есть коллекция файлов (код ниже), все работает как надо до тех пор, пока не пытаешься добавить файл с не разрешенным майм-тайпом или большего размера, то ошибки валидации не происходит (ассерт файла в самом низу)

# форма


class CreateMessageType extends BaseCreateMessageType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
		$builder
			->add('body', 'wysiwyg_textarea', array(
					'label' => false
				));

		$builder
			->add(
				'files', 'collection', array(
					'type' => new MessageFileType(),
					'allow_add'    => true,
					'by_reference' => false,
				)
			)
		;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'xxx\ForumBundle\Entity\Message',
			'error_bubbling' => true,
            'new_entry'  => false,
        ));
    }
}

# описание типа поля файлов
class MessageFileType extends AbstractType
{
	public function buildForm(FormBuilderInterface $builder, array $options)
	{
		$builder->add('file', 'file');
	}

	public function setDefaultOptions(OptionsResolverInterface $resolver)
	{
		$resolver->setDefaults(array(
				'data_class' => 'xxx\ForumBundle\Entity\MessageFiles',
				'error_bubbling' => true,
				'error_mapping' => array(
					'upload' => 'file'
				)
			));
	}

	public function getName()
	{
		return 'file';
	}
} 

# ассерт файла

class MessageFiles
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
	 * assert\File(
	 *     maxSize = "3070k",
	 *     mimeTypes = {
	 *            	"application/pdf",
	 *              "application/x-pdf",
	 *              "image/gif",
	 * 				"image/jpeg",
	 * 				"image/pjpeg",
	 * 				"image/png",
	 * 				"image/tiff",
	 * 				"image/vnd.wap.wbmp",
	 * 				"image/bmp",
	 * 				"image/x-bmp",
	 * 				"image/x-ms-bmp",
	 * 				"text/rtf",
	 * 				"application/rtf",
	 * 				"application/vnd.oasis.opendocument.text",
	 * 				"application/msword",
	 * 				"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
	 * 		},
	 *     mimeTypesMessage = "Please upload a valid file"
	 * )
	 *
	 * assert\NotBlank()
     */
    public $file;

    # .........

}


PS - парсер съедает собаку перед ASSERT, но фактически в коде она есть
  • Вопрос задан
  • 2397 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Nikeos
PHP Developer
maxSize = "3070k" - почти равно 3М.
На всякий случай проверьте лимит установленный в конфигурации nginx client_max_body_size, так как по умолчанию он равен 2М.
Также стоит глянуть в php.ini upload_max_filesize, post_max_size. Так как если размер файла > maxSize но при том < client_max_body_size - то это ошибка валидации, а если размер > client_max_body_size - то это - 413 "Request Entity Too Large" - уже ошибка сервера (а вдруг он настроен так, чтобы их не показывать).
P.S. Понимаю, что кому-то ответ может показаться примитивным, но у самого недавно была похожая ситуация.
Ответ написан
benbor
@benbor
Помог ответ - не забудь лайкнуть
Дубль 2. symfony.com/doc/current/reference/forms/types/coll...
Попробуйте еще это.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы