渲染元素

admin 提交于 周三, 06/07/2023 - 15:21
渲染元素

在上一节中,介绍了在 渲染数组 中通过 #theme 属性以 twig 模板渲染的方式输出 HTML。

通常网站页面的 HTML 结构都比较复杂,并且有很多重复出现的结构,这时编写 渲染数组 的代码就会很困难。 Drupal 定义了一种容器,可以把常用的 渲染数组 预封装起来,使得 渲染数组 的代码易于组织和重用。 这种容器被称为 渲染元素

下面的代码定义了一个 渲染元素,它把上一节中的模板渲染数组代码预封装起来:

use Drupal\Core\Render\Element\RenderElement;

/**
 * @RenderElement("my_element")
 */
class MyElement extends RenderElement {
  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    return [
      '#theme' => 'hello_world',
      '#name' => '小明'
    ];
  }
}

代码中的 @RenderElement 被称为 注解,它是 Drupal 插件编写的一种语法, 由 doctrine/annotations 提供。

定义了 渲染元素后,在 渲染数组 代码中就可以用 #type 属性输出 渲染元素

function someController() {
  return [
    '#type' => 'my_element'
  ];
}

这里为了明了起见,特意把 渲染元素 中的代码写得简单。在复杂的 HTML 结构下, 渲染元素 会非常有用。 Drupal Core 内建了将近 100 个渲染元素