Недействительный токен Symfony2 с большими файлами

У меня возникла проблема с формой поля токена и файла.

Проверка формы такова:

public function getDefaultOptions(array $options)
{
    $collectionConstraint = new Collection(array(
        'fields' => array(
            'file' => new File(
                array(
                    'maxSize' => '2M',
                    'mimeTypes' => array(
                        'application/pdf', 'application/x-pdf',
                        'image/png', 'image/jpg', 'image/jpeg', 'image/gif',
                    ),
                )
            ),
        )
    ));

    return array(
        'validation_constraint' => $collectionConstraint
}

Когда я загружаю файл недопустимого размера (~ 5 МБ), я получаю эту ошибку, на что надеюсь:

The file is too large. Allowed maximum size is 2M bytes

Но когда я загружаю слишком большой файл (~ 30 МБ), ошибка изменяется:

The CSRF token is invalid. Please try to resubmit the form
The uploaded file was too large. Please try to upload a smaller file

Проблема заключается в токене ошибки. У меня в моей форме код {{form_rest (form)}}. Я думаю, что изменение ошибки происходит из-за этого: Как увеличить лимит загрузки файлов в форме Symfony 2?

Я не хочу увеличивать лимит загрузки. Я хочу, чтобы ошибка маркера не показывалась.

Ответ 1

PHP (не Symfony) отклоняет файл, если он больше ваших сконфигурированных значений:

post_max_size
upload_max_filesize

Из-за этого возникает ошибка csrf.

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

Ответ 2

ПРОБЛЕМА

Недопустимый токен CSRF и слишком большой объем загружаемых файлов

Эти две ошибки представляют собой сгенерированные формой ошибки, и, кроме ошибок поля, они появятся, когда в форме появляется какое-либо исключение.

В этом случае при загрузке файлов токен CSRF недопустимая ошибка появляется из-за параметра post_max_size в файле конфигурации php.ini и Загрузка слишком большой ошибки появляется из-за параметра upload_max_filesize в файле конфигурации php.ini.

РЕШЕНИЕ:

1- Вы можете увеличить значение в файлах конфигурации.

2. Вы можете получить подтверждение поля и прокомментировать или пропустить строку form_errors внутри вашего template.html.twig, обратите внимание, что это решение удалит все виды уведомлений об ошибках, генерируемых формой.

Пример template.html.twig:

<div class="form">
{{ form_start(form) }}

   {{ form_errors(form) }} --> before 
   {# {{ form_errors(form) }} #} --> after

   <div class="field">
      {{ form_label(form.field) }}
      {{ form_errors(form.field) }}
      {{ form_widget(form.field) }}
   </div>

{{ form_end(form) }}
</div>

Ответ 3

В Entity.php вам нужно указать свойство maxSize для вашего Файл подтверждения.

В качестве примера значение "2147483648" равно 2 ГБ.

/**
* @ORM\Column(type="string", length=255)
*/
public $path;

/**
 * @Assert\File(maxSize="2147483648")
 */
public $file;