php - 如何装饰学说收藏
问题描述
我想装饰一个教义2集合并使用symfony4。
所以我有一个实体
class Entry
{
protected $title;
public function getTitle(): ?string
{
return $this->title;
}
}
还有一个装饰器:
class EntryDecorator
{
protected $entry;
public function __construct(Entry $entry)
{
$this->entry = $entry;
}
public function getTitle()
{
return '----'; // just for testing ;-)
}
}
在我的控制器中,我使用以下方法从数据库中加载完整条目:
$entries = $this->entryRepository->findAll()
我的观点很简单:
{% for entry in entries %}
{{ entry.getTitle }}
{% endfor %}
所以,现在我想装饰整个系列。
在 SF4 中,我发现How to Decorate Services看起来不错,但这不适用于这种情况。
因为: doctrine 返回一个不可变集合(请参阅Doctrine 2 中的这个主题不可变集合?)
所以我认为这样的事情会很好:
array_walk($entries, function($entry) {
return new EntryDecorator($entry);
});
但不起作用,因为集合是不可变的。
现在我有以下工作:
$entries = [];
foreach($this->entryRepository->findAll() as $entry) {
$entries[] = new EntryDecorator($entry);
}
但它看起来嗯,好的。
所以我的问题是:装饰学说收藏有更好的解决方案吗?
更新:
目前,我正在array_map()
为此使用。
array_map(function ($entry) {
$decorator = new EntryDecorator($entry);
return $decorator;
}, $entries);
解决方案
如果您想“转换”树枝模板中的数据,建议您使用TwigExtension并创建自定义过滤器(或函数)。
{# filter #}
{% for entry in entries %}
{{ entry.getTitle|my_decorator }}
{% endfor %}
{# function #}
{% for entry in entries %}
{{ my_decorator(entry) }}
{% endfor %}
推荐阅读
- python - 为什么我要绘制的代码没有显示带有标题、xlabel 和 ylabel 的输出?
- python - 病毒防护隔离我的 python exe 文件?
- spring - Spring boot 随机崩溃,没有错误
- javascript - 从函数中的子组件调用 prop 不起作用
- java - Java Web 应用程序 HTTPS 仅在 -Djavax.net.debug=all 设置时有效
- javascript - 如何从 .find JS 返回副本?
- html - 我的 html 代码没有显示在我的网站上,可能是什么问题?
- python-3.6 - Spyder 调试器导致深度递归
- sql - 连接来自不同服务器的两个 sys.columns 表
- python-3.x - 如何在不再次运行整个函数的情况下获取函数值