【第4回】Drupalカスタムモジュールで入力内容をDB保存する

  •  
 
MAXIMUM が に投稿

タグ

1. 目的

前回でフォームを作成しました。しかし、入力内容がどのような流れでDBに保存されていくかを追えてなかったので、今回はそれを追って行こうかと思います。

前提として、フォームと保存先のテーブルは作成済みとします。テーブルの作成方法については次回の記事で取り扱います。※.install使用

2. フォームからの入力データ

前回にシステムの入り口として用意したフォームから出欠するしないというデータが送られてきます。もちろん各ユーザが入力します。

仮に出席しますといったデータが流れてきた場合は、出席扱いで名前などとセットでINSERTされます。

3. ソースコードの書き方

続いて、ソースコードの書き方ですが、Drupalの場合はDB接続をコンストラクタで受け取ります。

public function __construct(
  private Connection $database,
) {
}

また、実際のDB接続はDrupalのサービスコンテナから取得します。

public static function create(ContainerInterface $container) {
  return new static(
    $container->get('database'),
  );
}

ちなみにプロパティを単独で記述する場合は下記のようになり、PHPでは最後にセミコロンが必要になります。

private Connection $database;

初回回答の場合の例ですが、下記のようにINSERTします。

$this->database->insert('event_manager_attendance')
  ->fields([
    'uid' => $uid,
    'event_id' => (int) $event->id(),
    'user_name' => $user_name,
    'attendance' => $attendance,
    'comment' => $comment,
    'created' => $this->time->getRequestTime(),
  ])
  ->execute();

4. キャッシュクリア

変更を適用する際は毎回恒例のキャッシュクリアをやります。※Macターミナルかつddev環境を前提に例で挙げます。

ddev drush cr

5. 感想

Drupalの場合はDB接続のやり方がテンプレート化しているので、イチから構築する手間がなくて良いなと思いました。

6. おまけ

ソースとしては前回のフォームと同じファイルに入っています。前回文も一緒にご参照ください。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。