РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
324 of 1361 menu

Правило File

Правило File применяется к полям формы, которые принимают загружаемые файлы. Оно проверяет, что файл не превышает максимальный размер, имеет разрешённый MIME-тип и допустимое расширение. Правило вешается на поле через опцию constraints или через атрибут #[File] на свойстве сущности. Параметр maxSize задаёт максимальный размер файла, а mimeTypes - список разрешённых MIME-типов.

Синтаксис

#[File( maxSize: '2M', mimeTypes: ['image/jpeg', 'image/png'], extensions: ['jpg', 'png'], )]

Пример

Давайте создадим форму с полем для загрузки изображения и повесим на него правило File с ограничением по размеру и MIME-типу:

<?php namespace AppForm; use SymfonyComponentFormAbstractType; use SymfonyComponentFormExtensionCoreTypeFileType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentValidatorConstraintsFile; use SymfonyComponentOptionsResolverOptionsResolver; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('image', FileType::class, [ 'constraints' => [ new File([ 'maxSize' => '2M', 'mimeTypes' => ['image/jpeg', 'image/png'], 'extensions' => ['jpg', 'png'], ]), ], ]); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => null, ]); } } ?>

Пример

Давайте обработаем форму в контроллере и проверим, валиден ли загруженный файл:

<?php namespace AppController; use AppFormArticleType; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationRequest; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/upload', name: 'article_upload')] public function upload(Request $request): Response { $form = $this->createForm(ArticleType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $file = $form->get('image')->getData(); return new Response('file: ' . $file->getClientOriginalName()); } return $this->render('article/upload.html.twig', [ 'form' => $form->createView(), ]); } } ?>

Результат выполнения кода для файла 'image.jpg':

"file: image.jpg"

Пример

Давайте повесим правило File через атрибут на свойство сущности:

<?php namespace AppEntity; use SymfonyComponentValidatorConstraintsFile; class Article { #[File( maxSize: '5M', mimeTypes: ['application/pdf'], extensions: ['pdf'], )] private ?string $document = null; public function getDocument(): ?string { return $this->document; } public function setDocument(?string $document): void { $this->document = $document; } } ?>

Если загрузить файл 'doc.txt' вместо PDF, форма вернёт ошибку валидации:

"The mime type of the file is invalid (\"text/plain\"). Allowed mime types are \"application/pdf\"."

Смотрите также

  • класс Form,
    который представляет форму в Symfony
  • правило Image,
    которое проверяет размеры изображения
  • тип поля FileType,
    который создаёт поле для загрузки файла
  • метод isValid,
    который проверяет валидность формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить