Как украсить сборник доктрин

Я хочу украсить коллекцию 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);
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
151
1

Ответы 1

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

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

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

Это хорошая идея, но работает только для Twig. Если я хочу использовать другой шаблонизатор или создать ответ json, это не сработает. я ищу решение, чтобы «вставить» декоратор в доктрину, например

rob 28.11.2018 08:09

Другие вопросы по теме