Правило Image
Правило Image применяется к полю формы, которое содержит загруженный файл,
и проверяет, что этот файл является изображением. Правило позволяет ограничить
минимальную и максимальную ширину, высоту, а также соотношение сторон.
Обычно используется вместе с типом поля FileType.
Синтаксис
#[Image(
minWidth: 100,
maxWidth: 2000,
minHeight: 100,
maxHeight: 2000,
minRatio: 0.5,
maxRatio: 2.0,
allowSquare: true,
allowLandscape: true,
allowPortrait: true,
detectCorrupted: true,
mimeTypes: ['image/jpeg', 'image/png'],
maxSize: '2M'
)]
Пример
Давайте создадим форму с полем для загрузки изображения и повесим на него правило Image:
<?php
namespace AppForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeFileType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentValidatorConstraintsImage;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('cover', FileType::class, [
'label' => 'Cover image',
'constraints' => [
new Image([
'minWidth' => 100,
'maxWidth' => 2000,
'minHeight' => 100,
'maxHeight' => 2000,
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Пример
Давайте обработаем форму в контроллере и выведем сообщение об успешной загрузке:
<?php
namespace AppController;
use AppFormArticleType;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function upload(Request $request): Response
{
$form = $this->createForm(ArticleType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return new Response('image uploaded');
}
return $this->render('article/upload.html.twig', [
'form' => $form->createView(),
]);
}
}
?>
Пример
Давайте выведем форму в шаблоне Twig:
{{ form_start(form) }}
{{ form_row(form.cover) }}
<button type="submit">Upload</button>
{{ form_end(form) }}
Результат выполнения кода для корректного изображения:
"image uploaded"