wieni/wmpresenter

为实体类添加创建和注入视图显示器的支持

安装数: 1,930

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 4

分支: 1

开放问题: 0

类型:drupal-module

1.0.1 2024-01-07 10:30 UTC

This package is auto-updated.

Last update: 2024-09-07 11:58:43 UTC


README

Latest Stable Version Total Downloads License

为实体类添加创建和注入视图显示器的支持

为什么?

显示器是从 模型-视图-显示器 模式借用的原则,这是一种类似于 模型-视图-控制器 的软件设计模式。我们使用它来在显示之前转换数据。一些示例用例

  • 将姓名和前缀/后缀连接成一个完整的个人职称
  • 在图像字段为空时显示备用图像
  • 将一组营业时间转换为在 Twig 中更容易消费的格式

安装

此软件包需要 PHP 7.1 和 Drupal 8 或更高版本。可以使用 Composer 进行安装

 composer require wieni/wmpresenter

它如何工作?

创建显示器

显示器类应实现 PresenterInterface

AbstractPresenter 是推荐的基本类,它提供了魔法方法,允许您直接在显示器类上调用实体类的方法。可以使用 @mixin docblock 通知 IDE 这种行为。如果不喜欢魔法,而希望直接在实体上调用实体方法,可以使用 @property docblock。

<?php

namespace Drupal\wmcustom\Entity\Presenter\Node;

use Drupal\wmcustom\Entity\Model\Node\Page as PageModel;
use Drupal\wmpresenter\Entity\AbstractPresenter;

/**
 * @mixin PageModel
 * @property PageModel $entity
 */
class Page extends AbstractPresenter
{
}

显示器应注册为服务。在显示器服务上设置 shared: false 非常重要,否则同一类型的所有显示器都将使用相同的实体。

可以通过使实体类实现 HasPresenterInterface 来将显示器分配给实体。`getPresenterService` 方法应返回显示器服务 ID。

具有显示器的实体不必实现 EntityInterface。任何类都可以使用。

自动注入显示器

在包含到 Twig 模板中时,实体将自动转换为它们的显示器对应物。一些示例

  • 实体作为参数传递给 wmcontroller 控制器的 view 方法。
  • 实体通过使用 includeembed 等功能传递给其他 Twig 组件。

手动加载显示器

在代码中,可以使用 PresenterFactoryInterface::getPresenterForEntity 加载显示器。

在 Twig 中,可以通过传递实体通过 ppresenter 过滤器来加载显示器。当传递实体数组时,所有实体都将转换为它们的显示器对应物。

Twig\Sandbox\SecurityError: 在 <presenter> 对象上调用方法是不允许的

Twig 有一个白名单功能,可以防止人们在 Twig 模板上调用未知类的实例。为了允许您在 Twig 模板中使用显示器,您必须通过在 settings.php 中添加以下内容来更改白名单

$settings['twig_sandbox_whitelisted_classes'] = [
    \Drupal\wmpresenter\Entity\PresenterInterface::class,
];

变更日志

此项目的所有重大更改都将记录在 CHANGELOG 文件中。

安全

如果您发现任何与安全相关的问题,请通过电子邮件 security@wieni.be 报告,而不是使用问题跟踪器。

许可证

在MIT许可证下分发。有关更多信息,请参阅 LICENSE 文件。