Недействительный токен 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;