Как украсить коллекцию доктрин

Я хочу украсить коллекцию 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 ;-)
}
}

И в моем контроллере я загружаю полные записи из базы данных, используя:

$entries = $this->entryRepository->findAll()

И мой взгляд прост как это:

{% for entry in entries  %}
{{ entry.getTitle }}
{% endfor %}

Итак, теперь я хочу украсить всю коллекцию.

В SF4 я нашел Как украсить услуги который выглядит хорошо, но это не работает для этой ситуации.

Так как: Доктрина возвращает неизменную коллекцию (см. эту тему Неизменные коллекции в 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

Решение

Если вы хотите «преобразовать» данные в шаблоне ветки, если вы предлагаете использовать TwigExtension и создайте пользовательский фильтр (или функцию).

{# filter #}
{% for entry in entries  %}
{{ entry.getTitle|my_decorator }}
{% endfor %}

{# function #}
{% for entry in entries  %}
{{ my_decorator(entry) }}
{% endfor %}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]