Image

Дата обновления перевода 2023-09-25

Image

Ограничение Image работает так же, как и ограничение File, только его опции mimeTypes и mimeTypesMessage автоматически устанавливаются так, чтобы работать конкретно с файлами изображений.

Кроме того, оно имеет опции, чтобы вы могли валидировать ширину и высоту изображения.

См. ограничение File, чтобы увидеть часть документации этого ограничения.

??????????? ? ???????? ??? ??????
????? Image
????????? ImageValidator

Базовое применение

Это ограничение наиболее часто используется в свойстве, которое будет отображено в форме как поле FileType. Например, представьте, что вы создаёте форму автора, где вы можете загружать изображение "портрет" (headshot) автора. В вашей форие, свойство headshot будет типом file. Класс Author может выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\HttpFoundation\File\File;

class Author
{
    protected File $headshot;

    public function setHeadshot(File $file = null): void
    {
        $this->headshot = $file;
    }

    public function getHeadshot(): File
    {
        return $this->headshot;
    }
}

Чтобы гарантировать, что объект headshot File является валидным изображением и что он имеет определённый размер, добавьте следующее:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Image(
        minWidth: 200,
        maxWidth: 400,
        minHeight: 200,
        maxHeight: 400,
    )]
    protected File $headshot;
}

Свойство headshot валидируется, чтобы гарантировать, что это настоящее изображение, и что оно находится в рамках определённой ширины и высоты.

Вы также можете захотеть гарантировать, что изображение headshot является квадратом. В этом случае, вы можете отключить вертикальную и горизонтальную ориентацию, как показано в следующем коде:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// src/Entity/Author.php
namespace App\Entity;

use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\Validator\Constraints as Assert;

class Author
{
    #[Assert\Image(
        allowLandscape: false,
        allowPortrait: false,
    )]
    protected File $headshot;
}

Вы можете смешать все опции ограничений, чтобы создать мощные правила валидации.

Опции

Это ограничеие использует все опции вместе с ограничением File. Однако, оно изменяется два значения опций по умолчанию и несколько других опций.

allowLandscape

тип: Boolean по умолчанию: true

Если эта опция - false, то изображение не может иметь горизонтальную ориентацию.

allowLandscapeMessage

тип: string по умолчанию: Изображение имеет горизонтальную ориентацию ({{ width }}x{{ height }} пикселей). Изображения с горизонтальной ориентацией не допускаются

Сообщение ошибки, если изображение имеет горизонтальную ориентацию, а вы установили allowLandscape, как false.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ height }} ??????? ??????
{{ width }} ??????? ??????

allowPortrait

тип: Boolean по умолчанию: true

Если эта опция - false, изображение не может быть вертикально ориентированным.

allowPortraitMessage

тип: string по умолчанию: Изображение имеет вертикальную ориентацию ({{ width }}x{{ height }} пикселей). Изображения с вертикальной ориентацией не допускаются

Сообщение ошибки, если изображение имеет вертикальную ориентацию, а вы установили allowPortrait, как false.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ height }} ??????? ??????
{{ width }} ??????? ??????

allowSquare

тип: Boolean по умолчанию: true

Если эта опция - "false", то изображение не может быть квадратом. Если вы хотите принудить к квадратному изображению, то оставьте этой опции значение по умолчанию true, и установите и allowLandscape, и allowPortrait как false.

allowSquareMessage

тип: string по умолчанию: Изображение является квадратом ({{ width }}x{{ height }}px). Квадратные изображения не допускаются

Сообщение ошибки, если изображение является квадратом, а вы установили allowSquare, как false.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ height }} ??????? ??????
{{ width }} ??????? ??????

corruptedMessage

тип: string по умолчанию: Файл изображения повреждён.

Сообщение ошибки, когда опция detectCorrupted подключена и изображение повреждено.

Это сообщение не имеет параметров.

detectCorrupted

тип: boolean по умолчанию: false

Если эта опция - "true", то содержимое изображения валидируется, чтобы гарантировать, что изображение не повреждено. Эта валидация проводится с PHP-функцией imagecreatefromstring, которая требует, чтобы расширение PHP GD было подключено.

groups

type: array | string default: null

It defines the validation group or groups of this constraint. Read more about validation groups.

maxHeight

тип: integer

Если установлена, то высота файла изображения должна быть меньше, или равна этому значению в пикселях.

maxHeightMessage

тип: string по умолчанию: Высота изображения слишком большая ({{ height }}px). Максимальная позволенная высота - {{ max_height }} пикселей.

Сообщение ошибки, если высота изображения превышает maxHeight.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ height }} ??????? (??????????) ??????
{{ max_height }} ???????????? ??????????? ??????

maxPixels

тип: integer

Если установлена, то количество пикселей файла изображения должно быть меньше или равно этому значению.

maxPixelsMessage

тип: string по умолчанию: Изображение имеет слишком много пикселей ({{ pixels }} пикселей). Максимальное ожидаемое количество - {{ max_pixels }} пикселей.

Сообщение ошибки, если количество пикселей изображения превышает maxPixels.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ height }} ??????? ?????? ???????????
{{ max_pixels }} ???????????? ??????????? ?????????? ????????
{{ pixels }} ??????? ?????????? ????????
{{ width }} ??????? ?????? ???????????

maxRatio

тип: float

Если установлена, то соотношение аспектов (width / height) файла изображения должно быть меньше, или равно этому значению.

maxRatioMessage

тип: string по умолчанию: Соотношене изображения слишком большое ({{ ratio }}). Максимальное позволенное соотношение - {{ max_ratio }}

Сообщение ошибки, если соотношение изображения превышает maxRatio.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ max_ratio }} ???????????? ??????????? ???????????
{{ ratio }} ??????? (??????????) ???????????

maxWidth

тип: integer

Если установлена, то ширина файла изображения должна быть меньше, или равна этому значению в пикселях.

maxWidthMessage

тип: string по умолчанию: Ширина изображения слишком большая ({{ width }}px). Максимальная позволенная ширина - {{ max_width }} пикселей.

Сообщение ошибки, если ширина изображения превышает maxWidth.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ max_width }} ???????????? ??????????? ??????
{{ width }} ??????? (??????????) ??????

mimeTypes

тип: array или string default: image/*

Вы можете найти список существующих mime-типов изображений на сайте IANA.

mimeTypesMessage

тип: string default: Этот файл не является валидным изображением.

If all the values of the mimeTypes option are a subset of image/*, the error message will be instead: The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.

You can use the following parameters in this message:

Parameter Description
{{ file }} Absolute file path
{{ name }} Base file name
{{ type }} The MIME type of the given file
{{ types }} The list of allowed MIME types

minHeight

тип: integer

Если установлена, то высота файла изображения должна быть больше, или равна этому значению в пикселях.

minHeightMessage

тип: string по умолчанию: Высота изображения слишком маленькая ({{ height }}px). Минимальная позволенная высота - {{ min_height }} пикселей.

Сообщение ошибки, если высота изображения меньше, чем minHeight.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ height }} ??????? (??????????) ??????
{{ min_height }} ??????????? ??????????? ??????

minPixels

тип: integer

Если установлена, то количество пикселей файла изображения должно быть больше или равно этому значению.

minPixelsMessage

тип: string по умолчанию: Изображение имеет слишком мало пикселей ({{ pixels }} пикселей). Минимальное ожидаемое количество - {{ min_pixels }} пикселей.

Сообщение ошибки, если количество пикселей изображения меньше, чем minPixels.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ height }} ??????? ?????? ???????????
{{ min_pixels }} ??????????? ??????????? ?????????? ????????
{{ pixels }} ??????? ?????????? ????????
{{ width }} ??????? ?????? ???????????

minRatio

тип: float

Если установлена, то соотношение аспектов (width / height) файла изображения должно быть больше, или равно этому значению.

minRatioMessage

тип: string по умолчанию: Соотношене изображения слишком маленькое ({{ ratio }}). Минимальное позволенное соотношение - {{ min_ratio }}

Сообщение ошибки, если соотношение изображения меньше, чем minRatio.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ min_ratio }} ??????????? ??????????? ???????????
{{ ratio }} ??????? (??????????) ???????????

minWidth

тип: integer

Если установлена, то ширина файла изображения должна быть больше, или равна этому значению в пикселях.

minWidthMessage

тип: string по умолчанию: Ширина изображения слишком маленькая ({{ width }}px). Минимальная позволенная ширина - {{ min_width }} пикселей.

Сообщение ошибки, если ширина изображения меньше, чем minWidth.

Вы можете использовать следующие параметры в этом сообщении:

???????? ????????
{{ min_width }} ??????????? ??????????? ??????
{{ width }} ??????? (??????????) ??????

sizeNotDetectedMessage

тип: string по умолчанию: Размер изображения не мог быть определён.

Если система не может определить размер изображения, то будет отображена эта ошибка. Это случится только если было установлено хотя бы одно ограничение опций размера.

Это сообщение не имеет параметров.