我想装饰一个doctrine2集合并使用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 ;-)
}
}
然后在我的Controller中,使用以下命令从数据库加载完整的条目:
$entries = $this->entryRepository->findAll()
我的观点很简单:
{% for entry in entries %}
{{ entry.getTitle }}
{% endfor %}
所以,现在我要装饰整个收藏集。
在SF4中,我发现How to Decorate Services看起来不错,但这在这种情况下不起作用。
原因是:该学说返回一个不变的集合(请参见Immutable collections in 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);
答案 0 :(得分:1)
如果要“转换”树枝模板中的数据,建议您使用TwigExtension并创建自定义过滤器(或函数)。
{# filter #}
{% for entry in entries %}
{{ entry.getTitle|my_decorator }}
{% endfor %}
{# function #}
{% for entry in entries %}
{{ my_decorator(entry) }}
{% endfor %}