Могу ли я расширить или подключить, чтобы обновить метод хранилища?

Есть ли в Flow способ подключить или расширить метод / функцию обновления репозитория? Мне нравится создавать несколько сообщений (в виде объектов), если объект все равно меняется.

В настоящее время мы используем UnitOfWork в контроллере после передачи объекта в хранилище для обновления. Но с этим обмен сообщениями работает только в этой функции, а не "глобально", где бы я ни обновлял этот объект.

Мне не нравится идея вставить это в сеттеры этого объекта. Это был бы неприятный код, по моему мнению.

Есть идеи?

2 ответа

Решение

Вы можете попробовать сделать YourRepository который будет расширяться Repository и реализовать свой update() метод (или вызов parent::update() и реализовать остальную часть вашей логики). Все ваши репозитории должны наследовать YourRepository класс вместо Repository,

Создайте YourRepository:

use TYPO3\Flow\Annotations as Flow;
use TYPO3\Flow\Persistence\Repository;
/**
 * @Flow\Scope("singleton")
 */
class YourRepository extends Repository {
    public function update($object) {
        parent::update($object);
        // your logic
    }
}

или скопировать-вставить update() тело метода из Repository Класс и добавить свою логику:

public function update($object) {
    if (!is_object($object) || !($object instanceof $this->entityClassName)) {
        $type = (is_object($object) ? get_class($object) : gettype($object));
        throw new \TYPO3\Flow\Persistence\Exception\IllegalObjectTypeException('The value given to update() was ' . $type . ' , however the ' . get_class($this) . ' can only store ' . $this->entityClassName . ' instances.', 1249479625);
    }

    $this->persistenceManager->update($object);
}

Каждый репозиторий домена Model теперь должен наследовать от YourRepository:

use TYPO3\Flow\Annotations as Flow;
/**
 * @Flow\Scope("singleton")
 */
class ModelRepository extends YourRepository {

}

Я бы сказал, что вам стоит взглянуть на функцию Flows AOP. В соответствии с предпосылкой разделения интересов (SoC) хранилище не отправляет уведомления.

Взгляните на документы: Аспектно-ориентированное программирование

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