wieni / wmpresenter
为实体类添加创建和注入视图显示器的支持
Requires
- php: ^8.0
- drupal/core: ^9.1 || ^10
- wieni/wmtwig: ^1.0
Requires (Dev)
- composer-runtime-api: ^2.0
- ergebnis/composer-normalize: ^2.0
- wieni/wmcodestyle: ^1.3
This package is auto-updated.
Last update: 2024-09-07 11:58:43 UTC
README
为实体类添加创建和注入视图显示器的支持
为什么?
显示器是从 模型-视图-显示器 模式借用的原则,这是一种类似于 模型-视图-控制器 的软件设计模式。我们使用它来在显示之前转换数据。一些示例用例
- 将姓名和前缀/后缀连接成一个完整的个人职称
- 在图像字段为空时显示备用图像
- 将一组营业时间转换为在 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
方法。 - 实体通过使用
include
或embed
等功能传递给其他 Twig 组件。
手动加载显示器
在代码中,可以使用 PresenterFactoryInterface::getPresenterForEntity
加载显示器。
在 Twig 中,可以通过传递实体通过 p
或 presenter
过滤器来加载显示器。当传递实体数组时,所有实体都将转换为它们的显示器对应物。
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 文件。