0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

wire / drupal ってなんや?

Posted at

Alpine.js を使うとか使わないとかで記事を探してたら出てきた。
よくわからないけど動的インターフェイスをコンポーネント化できるらしいので試してみる。

クイックスタート

ドキュメント通りに進める。

インストール

# モジュールインストール
composer require wire-drupal/wire
# モジュール有効化
drush en wire
# コンポーネント作成コマンド
drush generate wire

コマンドを叩くと以下の内容のやり取りがある

Module machine name [app]: (システム内部名称)
 ➤ counter

 Wire label [Example]: (モジュール一覧画面のラベル)
 ➤ Counter

 Wire ID [counter]: (多分 twig とかで使用するときようのID)
 ➤ 

 Wire class [Counter]: (Class名)
 ➤ 

 Inline template [No]: (Yes にすると PHP で HTML(twig)を直書きできる. Twig を使いたいから基本Noで良さそう)
 ➤ 

 Would you like to inject dependencies? [No]: (DIするサービスはあるかどうか)
 ➤ 

Wire IDWire class はシステム内部名称に合わせて自動で補完してくれる。
DI は Yes とするとその後 DIするサービスを入力できる機能まで付いていた。

ファイルの中身

対話が終わると以下2つのファイルがカスタムモジュールディレクトリ下に生成された。

Counter.php
/**
 * Implementation for Counter Wire Component.
 *
 * @WireComponent(
 *   id = "counter",
 *   label = @Translation("Counter"),
 * )
 */
class Counter extends WireComponent {

  public function render(): ?View {
    return View::fromTpl('counter');
  }

}
counter.html.twig
<div>
    ...
</div>

なぜか info.yml が生成されなかったので手動で作って有効化する必要があった。

コンポーネントを Twig ファイルに含める

twig ファイルで wire() 関数を呼び出すことでコンポーネントを使用できる。

{{ wire('counter') }}

コントローラーのレンダリング配列に #type#id を指定することで表示することもできる。

カウンター機能を追加

一旦コピペで確認

Counter.php
class Counter extends WireComponent {

  public int $count = 0;
  
  public function increment() {
    $this->count++;
  }
  
  public function render(): ?View {
    return View::fromTpl('counter');
  }
  
}
counter.html.twig
<div style="text-align: center">

  <button wire:click="increment">+</button>
  
  <h1>{{ count }}</h1>
  
</div>

結果

スクリーンショット 2023-07-22 16.56.01.png

まとめ

  • vue でいう script を PHP で書いて template は twig っぽい感じで書ける。
  • テンプレート側のイベントをリッスンしてPHPで更新やらできるっぽいので対話型のサイトも簡単に作成できそう。
  • alpinejs が読み込まれてるけど書き方ちょっと違うし、これは一体なんなんだろう。謎が深まった。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?