File

Валидирует, что значение является валидным "файлом", который может быть:

  • Строкой пути (или объектом с методом __toString()) к существующему файлу;
  • Валидным объектом File (включая объекты класса UploadedFile).

Это ограничение часто используется в формах с полем формы FileType.

Tip

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

Применяется к свойству или методу
Опции
Класс File
Валидатор FileValidator

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

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

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

use Symfony\Component\HttpFoundation\File\File;

class Author
{
    protected $bioFile;

    public function setBioFile(File $file = null)
    {
        $this->bioFile = $file;
    }

    public function getBioFile()
    {
        return $this->bioFile;
    }
}

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

  • Annotations
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\File(
         *     maxSize = "1024k",
         *     mimeTypes = {"application/pdf", "application/x-pdf"},
         *     mimeTypesMessage = "Пожалуйста загрузите валидный PDF"
         * )
         */
        protected $bioFile;
    }
    
  • YAML
    1
    2
    3
    4
    5
    6
    7
    8
    # src/AppBundle/Resources/config/validation.yml
    AppBundle\Entity\Author:
        properties:
            bioFile:
                - File:
                    maxSize: 1024k
                    mimeTypes: [application/pdf, application/x-pdf]
                    mimeTypesMessage: Пожалуйста загрузите валидный PDF
    
  • XML
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <!-- src/AppBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="AppBundle\Entity\Author">
            <property name="bioFile">
                <constraint name="File">
                    <option name="maxSize">1024k</option>
                    <option name="mimeTypes">
                        <value>application/pdf</value>
                        <value>application/x-pdf</value>
                    </option>
                    <option name="mimeTypesMessage">Пожалуйста загрузите валидный PDF</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    // src/AppBundle/Entity/Author.php
    namespace AppBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('bioFile', new Assert\File(array(
                'maxSize' => '1024k',
                'mimeTypes' => array(
                    'application/pdf',
                    'application/x-pdf',
                ),
                'mimeTypesMessage' => 'Пожалуйста загрузите валидный PDF',
            )));
        }
    }
    

Свойство bioFile валидируется, чтобы гарантировать, что это настоящий файл. Его размер и mime-тип также валидируются, так как были указаны соответствующие опции.

Опции

maxSize

тип: mixed

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

Суффикс Имя единицы значение напр.
  байт 1 байт 4096
k килобайт 1,000 байтов 200k
M мегабайт 1,000,000 байтов 2M
Ki кибибайт 1,024 байтов 32Ki
Mi мебибайт 1,048,576 байтов 8Mi

Чтобы узнать больше о разнице между двоичными и SI приставками, см. Википедия: Двоичные приставки.

binaryFormat

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

Когда true, то размеры будут отображены в сообщениях с единицами с двоичными приставками (KiB, MiB). Когда false, то размеры будут отображены с единицами с SI-приставками (kB, MB). Когда null, то binaryFormat будет угадан из значения, определённого опцией maxSize.

Чтобы узнать больше о разнице между двоичными и SI приставками, см. Википедия: Двоичные приставки.

mimeTypes

тип: array или string

Если опция установлена, то валидатор проверит, чтобы mime-тип основоположного файла равнялся заданному mime-типу (если это строка), или существовал в коллекции заданных mime-типов (если это массив).

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

maxSizeMessage

тип: string по умолчанию: Файл слишком большой ({{ size }} {{ suffix }}). Максимальный разрешённый размер - {{ limit }} {{ suffix }}.

Отображаемое сообщеие, если файл больше, чем опция maxSize.

mimeTypesMessage

тип: string по умолчанию: Mime-тип файла не является валидным ({{ type }}). Позволенный mime-тип - {{ types }}.

Отображаемое сообщение, если mime-тип файла не является валидным в опции mimeTypes.

disallowEmptyMessage

тип: string по умолчанию: Пустой файл не позволяется.

Ограничение проверяет, не пуст ли загруженный файл (т.е. 0 байтов). Если он пуст, то отображается это сообщение.

notFoundMessage

тип: string по умолчанию: Файл не был найден.

Отображаемое сообщение, если файл не мог быть найден по заданному пути. Эта ошибка возможна только если основоположное значение является строкой пути, так как объект File не может быть сконструирован с невалидным путём файла.

notReadableMessage

тип: string по умолчанию: Файл нечитаем.

Сообщение отображаемое, если файл существует, но PHP-функция is_readable() терпит неудачу при передачи пути файлу.

uploadIniSizeErrorMessage

тип: string по умолчанию: Файл слишком большой. Позволенный максимальный размер - {{ limit }} {{ suffix }}.

Отображаемое сообщение, если загруженный файл больше, чем настройка upload_max_filesize php.ini.

uploadFormSizeErrorMessage

тип: string по умолчанию: Файл слишком большой.

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

uploadErrorMessage

тип: string по умолчанию: Файл не мог быть загружен.

Сообщение, отображаемое, если загруженный файл не мог быть загружен по неизвестной причине, например, загрузка файла была неудачной, или файл не мог быть записан на диск.

payload

type: mixed default: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.