【发布时间】:2017-08-09 15:25:20
【问题描述】:
我目前正在尝试围绕 Drupal 8 模块开发最佳实践展开思考。我要做的就是在用户可以输入电子邮件地址的页面上创建一个简单的表单Demoform。当表单被提交时,我想发送一个事件demo_form.save。我还需要一个块,然后在块中显示用户的电子邮件地址(让我们说第二个侧边栏)。我之前已经实现了EventSubscriber 作为测试,因此事件得到正确调度等,我还订阅了事件(但如何获取块内的信息)现在我的问题是:这个工作流的最佳实践是什么:
文件 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
}
}
如何结合事件订阅者和块标记? Blockbase 本身可以实现 EventSubscriberInterface 并独立于 DemoEventSubscriber.php 吗?还是我需要注册一个传输表单数据的服务,然后在块的build() 函数中访问该服务?还是我错过了另一种方式?
感谢您的任何意见。
【问题讨论】:
标签: drupal-8