これは私が達成したいものです。 (私はそれがより簡単だろうと思った)。 私はUserEntityを持っています。 このエンティティの各フィールドを有する: "@assert \ NOTNULL(グループ= {" ステップ1 "})" 又は "@assert \ NOTNULL(グループ= {" ステップ2 "})"Sf2は1つのページ上の多くのフォームで1つのformTypeを分割します
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;
、私は私の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ボタンに続いてユーザー名inputTypeを、表示されます。 次に、City inputTypeとsubmitTwoボタンを表示します。
次に、ユーザーがサブミット1をクリックしてデータを検証し、このフィールドをデータベースに保存して保存します。ここで
が私の見解です:
{{ 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}) }}
私はすべてが素晴らしい作品最初のフォームを送信します。 私は2番目のサブミットを提出すると、「無効なCSRFトークンエラー」があります。実際にはdomを見ると、最初のフォームだけがCSRFトークンで隠された入力タイプを持っています。
CSRFトークンを(テストと同様に)手動で入力しようとしましたが、フォームを送信するとこのフォームのデータは保持されますが、他のフォームのデータフォームはnullに設定されます。
私は今のところ固執しています。 多分私はこれを間違っている、一般的なアイデアは同じページ上の異なるフォームに単一のエンティティを分割することです。
ありがとうございます!
この回答は役に立ちましたか? – Ryguydg