的を絞ることにします。興味のある方は以下のページやスライドをご覧になってみてください。サイトがセットアップできて準備が整ったら実際にフォームを作っていきましょう。琵琶湖線の駅名を調べる機能」を提供するかんたんなフォームを作ってみます。コードを使ったフォーム作成の一般的な手順は以下のとおりです。モジュールの作成コントローラの作成フォームの作成フォームのカスタマイズ以下順番に見ていきましょう。モジュールの作成まずはフォームの入れ物となるモジュールを用意します。」という名前のモジュールを作りましょう。つのファイルを作成しましょう。ファイルとしてシンタックスハイライトするようにエディタに設定しておくと読みやすくなります。なっていますが今のところはこれで問題ありません。空にしたままの状態で次へと進んでいきましょう。自動的にこれをモジュールとして認識してくれるようになります。モジュールが追加されているので、そちらを確認し有効化しましょう。今のところコードが入っていない空のモジュールなので特に機能などは追加されません。次はこのモジュールが提供するページを作成していきます。後ほどこのページにフォームを入れていくことになります。コントローラの作成コントローラを作成します。コントローラだけ作っても仕方がないので、対応するルーティングの設定もあわせてここで行います。スタイル(?)が採用されています。琵琶湖線駅名調べフォーム。従う必要があるためご注意ください。モジュールのルートに適当に入れても正しく認識してくれません。つづいて対応するルーティング設定を行います。ファイルを利用します。以下のファイルを追加しましょう。一元化されていたルーティング、メニュー、タブなどの設定を別個に定義/管理する形になりました。ここでは、ルーティング設定として以下のことを行っていることのみ押さえておいていただければと思います。いうメソッドに任せる。ページタイトルは「琵琶湖線駅名調べ」とする。いう権限を持ったユーザが見れるように設定する。メソッドの方では以下のことを行っているのでこちらも念頭に入れておいてください。いうクラスが定義したフォームを表示する。クラスは次のステップで作成するつもりなのでこの時点では未実装ですが、この時点でモジュールが定義したページが処理できるようになっているはずです。アクセスしてみましょう。以下のようなメッセージが表示されるのではないかと思います。サイトに予期せぬエラーが起こりました。たってから再度お試しください。なくこのエラーが返ってくるようになるのが正解です。文を追加してみてください。表示されるようになるはずです。以上でコントローラとルーティングの設定は完了です。次のステップからいよいよフォーム中身を作成していきます。フォームの作成フォームを作成しましょう。つの関数をセットで定義する形になっていました。実装する形でフォームを作成することになります。以下のファイルを作成しましょう。'京都駅から◯番目にある琵琶湖線の駅名を調べます。$this->t('負の数はいけません。駅離れたらそこはもう琵琶湖線ではありません。}}細かな部分は後述しますが、ここではひとまず以下のことをやっているということを押さえていただければと思います。琵琶湖線の駅名を返すフォームを作成する。具体的には以下のとおり。フィールドで数値を受け付けるフィールドを作成する。フォーム送信時のバリデーションとして、想定している数字以外の数字が渡されたらバリデーションエラーを戻す。フォーム送信成功時の処理として、琵琶湖線の駅名を返す。フォームクラスが完成したら、先ほどのページでフォームが表示できるようになっているはずです。アクセスしてみましょう。フォーム作成の一連のステップは完了です。あとは実際の要件に従って細かく作りこみをしていけばよいでしょう。!ということで、もうひとつフォームのカスタマイズの方法についても押さえておきます。使ってフォーム変更用のフックを書きましょう。ファイルに以下のコードを追加してください。後に書くようにしましょう。'正の整数を入力してください。メソッドの戻り値を設定します。ここでは次のことをしているということを押さえていただければと思います。クラスが描画するフォームを別の場所から変更して説明文言「正の整数を入力してください。キャッシュをリビルドしてページを確認すると、数値フィールドの下に「正の整数を入力してください。」という文言が追加されていることが確認できるのではないでしょうか。このあたりも詳細の解説は後述します。機能を追加してみましょう。処理を実装できるようになっています。機能を追加してみましょう。内容を以下のとおりに書き換えます。書き換えてしまって大丈夫です。'京都駅から◯番目にある琵琶湖線の駅名を調べます。処理する形に変更しました。ふたつのメソッドは今回あえて削除しています。アクセスし、フォームの挙動が変わっていることを確認してみてください。よってページ全体のリロードなしに答えがすかさずページ内に表示されることがご確認いただけるのではないでしょうか。今回は単発での値の処理の他に値を保持できるところを見るために(特に役割を果たさない)カウンタもつけてみました。リクエストが走った回数がここでご確認いただけるとものと思います。化のステップは終了です。つづいて上から順に解説をしていきたいと思います。いう名前のモジュールを作成しました。ディレクトリを使う形に変わっています。以下にまとめて置かれる形になりました。以下興味がある方はよろしければ。使うとこのあたりのモジュールテンプレートはターミナルから対話形式で作成することができます。他のフレームワークとも似た形でとっつきやすいので開発現場ではこちらが主流になっていくように思います。ファイルの中身はシンプルなのであまり迷うべきところはありませんが、まずは以下の要素が必須とされていることについて押さえておけばよいでしょう。ファイルに比べてパワーアップしている部分もちょこちょこ見られるので、興味のある方は以下の記事などをご覧になってみてください。アイテムの追加に相当します。部分がところどころ追加されているようです。今回のように特定のルートとコントローラをひもづけて使う形がベースですが、自作のコントローラを介さずに(表面上)直接フォームビルダに処理を任せることも可能です。今回のケースだと以下のように指定するとよいでしょう。'\Drupal\biwako\Form\BiwakosenForm'ルーティング周りで加えた変更を反映するにはキャッシュのリビルドが必要なのでご注意ください。パスから変数を取得したりなどルーティング周りもう少し凝ったことをしたい場合には以下の記事などがご参考になるかと思います。フォームを呼び出して描画しているだけですが、コントローラクラスのインスタンスにはさまざまな機能が備わっています。リファレンスページなどが参考になります。ウェイでレスポンスを返す場合、コントローラは原則レンダーアレイを返す必要があります。フォームはフォームクラスを使う形に変わりました。配置する必要があります。ファイルの中には名前空間の宣言、利用するクラスを書いた後にクラスの中身を書きます。getFormId()buildForm()validateForm()submitForm()それぞれのメソッドの役割は次のとおりです。なるため、サイト内でユニークな名称にする必要があります。フォームの生成を担当する。いうところのフォームビルダ関数。実装したクラスのインスタンスへと変わりました。実装したクラスのインスタンスへと変わりました。いくつか拡張が行われています。