Symfony2使用大文件无效令牌

时间:2013-05-02 11:40:15

标签: symfony symfony-forms

我遇到令牌和文件字段表单的问题。

表单的验证如下:

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?

我不想增加上传限制。我希望令牌错误不显示。

3 个答案:

答案 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;