在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]
所以也许我需要找到一种不合并表格的方法,这个没有名字的部分让我感到困惑。
答案 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()
方法。