10

我在使用令牌和文件字段表单时遇到问题。

表单的验证是这样的:

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) }} 代码。我认为错误更改是因为:如何增加 Symfony 2 表单上文件的上传限制?

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

4

3 回答 3

7

如果文件大于您在以下位置配置的值,PHP(不是 Symfony)会拒绝该文件:

post_max_size
upload_max_filesize

因此会抛出 csrf-error。

如果你想避免这种情况,你必须增加上传限制。这是唯一的方法。如果您添加文件约束,这应该没有风险。

于 2013-09-16T16:42:56.920 回答
0

问题

CSRF 令牌无效 & 上传文件太大错误

这两个错误是表单生成的错误,除了字段错误之外,当表单内部发生任何异常时都会出现。

在这种上传文件的情况下,由于php.ini 配置文件中的 post_max_size 参数出现 CSRF token invalid 错误,并且由于 php.ini配置 文件中的upload_max_filesize参数出现上传文件太大错误

解决方案:

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>
于 2015-12-02T21:41:53.377 回答
-2

在您的Entity.php 中,您需要为您的Assert 文件指定“ maxSize ”属性。

例如,值“2147483648”等于 2GB。

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

/**
 * @Assert\File(maxSize="2147483648")
 */
public $file;
于 2014-04-04T08:53:11.517 回答