在Symfony2项目中,如何将数组作为值传递给submit方法

时间:2016-03-07 15:34:13

标签: forms validation symfony

在Symfony2项目中,如何将数组作为值传递给submit方法?

我的表单需要7个参数,因此当我使用handleRequest()方式执行此操作时,通过手动填写表单可以正常工作,但如果我尝试使用数组而submit()则失败。

请注意,我传递给submit方法的数组顺序不同,没有令牌,而且有8个值而不是7。

当然,我没有使用handleRequest方法。

但是$ data [0]数组的键与实体属性的名称相同

$addForm = $this->createForm('ns_add', $entity);
$addForm->submit($data[0]);

编辑:几乎不错,有:

$addForm = $this->container->get('form.factory')->createNamed(null, 'ns_add', $entity);

所有参数都传递给表单,我可以在Symfony探查器(每个Symfony应用程序下的工具)上看到它,但我仍然有一个错误:CSRF令牌无效。请尝试重新提交表单。

由于我的所有7个字段都填满了+ 1个提交字段,因此我只有" _token"字段错过了,所以我尝试将其添加到我的$data[0]但它不会出现在我的数组的var_dump上,但是如果我添加了除" _token"以外的其他键,它会出现(并导致错误:不允许额外字段或类型)。

所以我想的是因为我的第一张表格的标记。事实上,真正的表单是一个7输入文本形式,但我创建了一个导出按钮,提取我导出的实体的配置。

然后,当我通过包含配置的表单上传文件时,我已经有了TOKEN。这是剖析器上的FORM SECTION视图:

ns_zippedfile [ns_zippedfile]
    file [file]
    ok [submit]
    _token [hidden]
(no name) [ns_add]
    name [text]
    adapter [choice]
    dbname [text]
    host [text]
    port [text]
    username [text]
    password [password]
    submit [submit]

所以也许我需要找到一种不合并表格的方法,这个没有名字的部分让我感到困惑。

2 个答案:

答案 0 :(得分:1)

尝试

$addForm = $this->container->get('form.factory')->createNamed(null, 'ns_add', $entity);

而不是

$addForm = $this->createForm('ns_add', $entity);

不要关心字段顺序。

如果不需要,您可以禁用CSRF保护:

$addForm = $this->container->get('form.factory')->createNamed(null, 'ns_add', $entity, ['csrf_protection' => false]);

答案 1 :(得分:0)

我解决了我的问题,

$addForm = $this->container->get('form.factory')->createNamed(null, 'ns_add', $entity);

很好,但是我更好地使用与参数2 ns_add相同的值,而不是null参数。工作正常。

$addForm = $this->container->get('form.factory')->createNamed('ns_add', 'ns_add', $entity);

N.B。:不要忘记生成令牌并将其保存在该字段的数据数组中:

$data[0]['_token'] = $this ->get('form.csrf_provider') ->generateCsrfToken('ns_add') ;

N.B.2:ns_add,这是我的表单的名称,查看EntityType类表单的getName()方法。