私は現在、Drupal 8モジュール開発のベストプラクティスの周りを頭で覆そうとしています。私がしようとしているのは、ユーザーが電子メールアドレスを入力できるページに単純なフォームDemoform
を置くことだけです。フォームが提出されると、私はイベントdemo_form.save
を派遣したいと思います。また、ブロック内にユーザーの電子メールアドレスを表示するブロックが必要です(サイドバーを2番目としましょう)。私はすでにEventSubscriber
をテストとして実装しているので、イベントは適切に発送され、イベントにも登録されました(しかし、ブロック内の情報を取得する方法)。今、私の質問:このワークフローのベストプラクティス:Drupal 8はブロック内からイベントを購読します
ファイルDemoForm.php
class DemoForm extends ConfigFormBase {
...
$event = $dispatcher->dispatch('demo_form.save', $e);
...
}
ファイルDemoEventSubscriber.php
class DemoEventSubscriber implements EventSubscriberInterface {
static function getSubscribedEvents() {
$events['demo_form.save'][] = array('onConfigSave', 0);
return $events;
}
public function onConfigSave($event) {
...
}
}
これは動作し、私はDemoEventSubscriberクラス内のフォームからの入力にアクセスし、私はそれでやりたいことができます。 今はブロックマークアップ内に電子メールアドレスを表示したいと思います。これはどのように最善を尽くすべきですか?
ファイルDemoBlock.php
class DemoBlock extends BlockBase {
public function build() {
// here return markup with email address from form
}
}
にはどうすればいいeventsubscriberとブロックのマークアップを組み合わせていますか? Blockbase
自体はEventSubscriberInterface
を実装でき、DemoEventSubscriber.php
から独立していますか?あるいは、フォームのデータを送信してブロックのbuild()
機能内のサービスにアクセスするサービスを登録する必要がありますか?または、私が行方不明になっている別の方法がありますか?
ありがとうございます。
本当にありがとうございます。configを使用するとうまくいきます。しかし、私は設定を使用したくないと仮定しましょう、あなたはブロック内の電子メールアドレスを取得する唯一の方法は、データベースに格納することだと思う? – user1841373
永続的に格納する唯一の方法は、データベースにあります。州の情報を格納するのにも使用できる州のAPIもあります。そこにメールを保存すると、状態がクリアされるまでブロックに表示される可能性があります。 – littlethoughts