Могу ли я расширить или подключить, чтобы обновить метод хранилища?
Есть ли в 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) хранилище не отправляет уведомления.
Взгляните на документы: Аспектно-ориентированное программирование