質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
87.20%
Drupal

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

PHP

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

受付中

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

mamama0927
mamama0927

総合スコア0

Drupal

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

PHP

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

0回答

0評価

0クリップ

62閲覧

投稿2022/08/06 01:17

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Drupal

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

PHP

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