teratail header banner
teratail header banner
質問するログイン新規登録
Drupal

DrupalはPHPで書かれたオープンソースのCMSフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

301閲覧

Drupal:マルチステップのカスタムフォームで別々のtwigファイルを扱う方法

mamama0927

総合スコア0

Drupal

DrupalはPHPで書かれたオープンソースのCMSフレームワークです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/08/06 01:17

0

0

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); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問