Drupalのカスタムモジュールからアンケートの入力→アンケートの入力内容確認→完了画面といった画面遷移でのフォームを作成しています。
下記サイトのように、フォームだけをphpファイルに記述して、twigで各フォームを呼び出して
登録→確認→完了 画面を作成したいのです。
https://www.drupal.org/forum/support/module-development-and-code-questions/2016-08-23/drupal8-render-form-in-a-twig
・登録、完了、確認画面で別々のtwigを呼び出して、画面遷移をさせたい
・下記phpコードの[fapiExampleMultistepFormNextSubmit]が動いたときに別のtwigファイルを表示させる方法
下記のようなマルチステップのカスタムフォームで、
登録、確認、完了画面で別々のtwigファイルを呼び出す方法をご教示ください。よろしくお願いします。
ソースコード
カスタムフォームを定義しているphp
「MultistepForm.php」
<?php namespace Drupal\form_api_example\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; class MultistepForm extends FormBase { public function getFormId() { return 'form_api_example_multistep_form'; } public function buildForm(array $form, FormStateInterface $form_state) { if ($form_state->has('page_num') && $form_state->get('page_num') == 2) { return $this->fapiExamplePageTwo($form, $form_state); } $form['#theme'] = 'my_awesome_form'; $form_state->set('page_num', 1); $form['description'] = [ '#type' => 'item', '#title' => $this->t('A basic multistep form (page 1)'), ]; $form['first_name'] = [ '#type' => 'textfield', '#title' => $this->t('First Name'), '#description' => $this->t('Enter your first name.'), '#default_value' => $form_state->getValue('first_name', ''), '#required' => TRUE, ]; $form['actions'] = [ '#type' => 'actions', ]; $form['actions']['next'] = [ '#type' => 'submit', '#button_type' => 'primary', '#value' => $this->t('Next'), '#submit' => ['::fapiExampleMultistepFormNextSubmit'], ]; return $form; } public function submitForm(array &$form, FormStateInterface $form_state) { $page_values = $form_state->get('page_values'); } public function fapiExampleMultistepFormNextValidate(array &$form, FormStateInterface $form_state) { } public function fapiExampleMultistepFormNextSubmit(array &$form, FormStateInterface $form_state) { $form_state ->set('page_values', [ 'first_name' => $form_state->getValue('first_name'), 'last_name' => $form_state->getValue('last_name'), 'birth_year' => $form_state->getValue('birth_year'), ]) ->set('page_num', 2) ->setRebuild(TRUE); } public function fapiExamplePageTwo(array &$form, FormStateInterface $form_state) { $form['description'] = [ '#type' => 'item', '#title' => $this->t('A basic multistep confirm form (page 2)'), ]; $form['first_name'] = [ '#type' => 'textfield', '#title' => $this->t('first_name'), '#required' => TRUE, '#default_value' => $form_state->getValue('first_name', ''), ]; $form['back'] = [ '#type' => 'submit', '#value' => $this->t('Back'), '#submit' => ['::fapiExamplePageTwoBack'], '#limit_validation_errors' => [], ]; $form['submit'] = [ '#type' => 'submit', '#button_type' => 'primary', '#value' => $this->t('Submit'), ]; return $form; } public function fapiExamplePageTwoBack(array &$form, FormStateInterface $form_state) { $form_state ->setValues($form_state->get('page_values')) ->set('page_num', 1) ->setRebuild(TRUE); } }

あなたの回答
tips
プレビュー