这是我想实现的。 (我认为这会更容易)。 我有一个UserEntity。 每个该实体的字段具有: “@assert \ NOTNULL(组= {” 步骤-1 “})” 或 “@assert \ NOTNULL(组= {” 第2步 “})”Sf2在一页上以多种形式分割一个formType
/** @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',
)
)
我想要做的是显示用户名的inputType,其次是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。
我现在被卡住了。 也许我做错了,总的想法是在同一页面上将单个实体拆分为不同形式。
谢谢!
这个答案有帮助吗? – Ryguydg