Drupal 8 - 读取自定义模块中的节点字段值

Drupal 8 - Reading node fields values within a custom module

我正在使用 Drupal 8.2.6,我想创建一个将显示在自定义内容类型页面上的块。

这是一种预订块,它向站点管理员发送电子邮件,告知访问者想要预订产品(自定义内容类型)。

我假设我需要一个仅由提交按钮和呈现表单的块组成的表单。

但真正的重点是将包含产品参考的邮件发送给网站管理员。

正如我发现的 here,我可以使用以下代码片段获得所需的值:

if ($node = \Drupal::routeMatch()->getParameter('node')) {
  $field_my_custom_value = $node->field_my_custom_value->value;
}

但我不确定我应该在我的代码的哪个范围内使用它。此示例用于在自定义块中呈现值,在我的情况下将发送包含这些值的邮件。

谁能提醒我如何从 Drupal 8 中的自定义模块发送邮件?

非常感谢

因此,在完成了一天的全部文档后,我自己解决了这个问题,这里是解决方案,因为我将把我的问题恢复到早期的修订版本,以防万一有人需要它。

所以,根据上面问题中的代码片段,我在 buildForm() 函数中声明了变量

public function buildForm(array $form, FormStateInterface $form_state) {
  $field_value = '';
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $field_value = $node->field_name->value;
  }

  $form['field_value'] = array(
    '#type' => 'value',
    '#value' => $field_value,
  );
  // And then you add the definition for other form items and submit button
}

为了使用该值发送邮件,您使用 $form_state 检索值,如下所示:

public function submitForm(array &$form, FormStateInterface $form_state) {
  $module = 'your_module_name';
  $key = 'any_key_you_would_like';
  $to = 'receiver@email.address';
  $langcode = 'en';
  $params = array(
    'body' => 'Node is booked',
    'subject' => $form_state->getValue('field_value'),
  );

  $mailer = \Drupal::service('plugin.manager.mail');
  $mailer->mail($module, $key, $to, $langcode, $params, NULL, TRUE);
}

有些值很难从节点获取,例如使用 $node->getTitle() 而不是 $node->field_name->value 的节点标题,因此您想使用 Drupal 8 的 Devel + Kint 模块检查您的字段了解要使用的属性和方法。