【发布时间】:2017-03-06 15:24:33
【问题描述】:
这是我想要实现的目标。 (我认为这会更容易)。 我有一个用户实体。 该实体的每个字段都有一个: “@Assert\NotNull(组={“step-1”})” 或者 "@Assert\NotNull(groups={"step-2"})"
/** @ORM\Column(name="username", type="string", length=255, nullable = true)
* @Assert\NotNull(groups={"step-1"})
*/
protected $username;
/** @ORM\Column(name="city", type="string", length=255, nullable = true)
* @Assert\NotNull( groups={"step-2"} )
*/
protected $city;
在 formType 上,我有 2 个字段和 2 个提交按钮:
->add('username')
->add('city')
->add('submit_form_1', SubmitType::class, array(
'validation_groups' => 'step-1',
)
)
->add('submit_form_2', SubmitType::class, array(
'validation_groups' => 'step-2',
)
)
我想做的是显示用户名输入类型,然后是 submitOne 按钮。 然后显示 City inputType,然后是 submitTwo 按钮。
然后,当用户点击提交时,验证数据,并将该字段保存在数据库中。
这是我的看法:
{{ form_start(form, { 'action': path('fos_user_profile_edit'), 'attr': { 'novalidate' : 'novalidate', 'class': 'fos_user_profile_edit' } }) }}
{{ form_row(form.userType.city) }}
{{ form_widget(form._token) }}
{{ form_widget(form.userType.submit_form_2) }}
{{ form_end(form, {'render_rest': false}) }}
{{ form_start(form, { 'action': path('fos_user_profile_edit'), 'attr': { 'novalidate' : 'novalidate', 'class': 'fos_user_profile_edit' } }) }}
{{ form_row(form.userType.username) }}
{{ form_widget(form._token) }}
{{ form_widget(form.userType.submit_form_1) }}
{{ form_end(form, {'render_rest': false}) }}
当我提交第一个表单时,一切都很好。 当我提交第二个表单时,我得到了一个“无效的 CSRF 令牌错误”,实际上,如果我查看 dom,只有第一个表单的输入类型隐藏了 CSRF 令牌。
我确实尝试手动输入 CSRF 令牌(仅作为测试),当我提交表单时,该表单的数据被持久化,但另一个表单的数据表单设置为 null。
我现在有点卡住了。 也许我做错了,一般的想法是在同一页面上将单个实体拆分为不同的形式。
谢谢!
【问题讨论】:
标签: forms validation symfony