我遇到令牌和文件字段表单的问题。
表单的验证如下:
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
}
当我上传一个无效的大小文件(~5MB)时,我得到了这个错误,这是我希望的:
The file is too large. Allowed maximum size is 2M bytes
但是当我上传一个太大的文件(~30MB)时,错误会改变:
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)}}代码。我认为错误更改是因为:How to increase the upload limit for files on a Symfony 2 form?
我不想增加上传限制。我希望令牌错误不显示。
答案 0 :(得分:7)
PHP(非Symfony)如果文件大于您在
中配置的值,则拒绝该文件post_max_size
upload_max_filesize
因此抛出了csrf错误。
如果您想避免这种情况,则必须增加上传限制。这是唯一的方法。如果添加文件约束,这应该没有风险。
答案 1 :(得分:0)
<强>问题强>
CSRF token invalid & upload file too large errors
这两个错误是表单生成的错误,除了字段错误之外,它们将在表单内发生任何异常时出现。
在这种上传文件的情况下 CSRF令牌无效错误由于 php.ini 配置文件中的 post_max_size 参数而出现 由于 php.ini 配置文件中的 upload_max_filesize 参数,上传文件太大错误会出现。
<强> SOLUTION:强>
1-您可以增加配置文件中的值。
2-您可以在 template.html.twig 中进行字段验证和评论或省略form_errors行,请注意此解决方案将删除所有类型的表单生成的错误通知。
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>
答案 2 :(得分:-2)
在 Entity.php 中,您需要指定&#34; maxSize&#34;属性Assert file。
例如,值&#34; 2147483648&#34;等于2GB。
/**
* @ORM\Column(type="string", length=255)
*/
public $path;
/**
* @Assert\File(maxSize="2147483648")
*/
public $file;