モジュールの作り方 Part.1ではControllerから直接Hello there!を表示しましたが、今回は管理画面のフォームで文言を入力し、入力した文言が表示されるモジュールです。今回は管理画面で入力用画面から文言が入力できるモジュールの一部分をご紹介いたします。
具体的には下記の画面のように、拡張機能(モジュール)の一覧画面で該当のwordsoutputモジュールのConfigureをクリックすると、
下記の入力用画面が開きます。そこで好きな文を入力するとその文字が指定されたURLで表示されるというモジュールです。今回はサイトURL/wordsで表示されるようにしたいと思います。
今回はモジュール名をwordsoutputとします。下記がフォルダ構成ですが、Part.1との違いは管理画面用のconfigフォルダがあり、管理画面の設定情報などの情報が必要となります。また、入力用のフォームWordsoutputForm.phpが必要となります。
drupal/modules/wordsoutput/
|-wordsoutput.info.yml
|-wordsoutput.routing.yml
|-src
|-Controller
|-wordsoutputController.php
|-Form
|-WordsoutputForm.php
|-config
|-install
|wordsoutput.settings.yml
|-schema
|wordsoutput.schema.yml
①wordsoutput.info.ymlについて
設定configure: wordsoutput.formが追加されています。これはモジュールの一覧でConfigureが表示され wordsoutput.formを呼ぶ出す処理になります。
name: Words Output module.
type: module
description: 'This is your second module.'
core: 8.x
configure: wordsoutput.form
②WordsoutputForm.phpの内容を一部表示いたします。WordsoutputFormクラスのbuildFormメソッドで入力フォームの内容を設定しています。またsubmitFormメソッドでは、フォームで入力した値を'wordsoutput.words'にセットしています。
class WordsoutputForm extends ConfigFormBase {
public function getFormId() {
return 'wordsoutput_form';
}
public function buildForm(array $form, FormStateInterface $form_state) {
// Form constructor
$form = parent::buildForm($form, $form_state);
// Default settings
$config = $this->config('wordsoutput.settings');
// Words field
$form['words'] = array(
'#type' => 'textfield',
'#title' => $this->t('好きな文を入力してください。'),
'#default_value' => $config->get('wordsoutput.words'),
'#description' => $this->t('好きな文を入力してください。'),
);
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$config = $this->config('wordsoutput.settings');
$config->set('wordsoutput.words', $form_state->getValue('words'));
$config->save();
return parent::submitForm($form, $form_state);
}