Я знаю, что этот вопрос старый, но я напишу лучший ответ, который приходит мне в голову.
1) Абстрагируйте вашу зависимость от интерфейса (т. Е. Используйте шаблон внедрения зависимостей, чтобы внедрить EntityManager вваш класс, который создает запросы и использует вместо этого EntityManagerInterface)
Теперь либо:
a) [Лучше, но дольше] Создайте новую реализацию, связанную с композицией для EntityManagerInterface, которая будет вызывать прокси-вызовы оригиналаentityManager и установит флаг кэша результатов в true:
<?php
class CachedEntityManager implements EntityManagerInterface {
private $proxiedManager;
public function __construct(EntityManagerInterface $proxiedManager) {
$this->proxiedManager = $proxiedManager;
}
public function createQuery($dql = '') {
$query = $this->proxiedManager->createQuery($dql);
$query->useResultCache(true);
}
[... proxy all the calls forth to proxiedManager ...]
}
b) [Не так хорошо, но короче] Расширьте класс EntityManager и переопределите createQuery.Помните, что в общем случае это не очень хорошая практика, и вам определенно не следует больше ничего писать в этом классе, а вместо этого преобразовать в a):
<?php
class CachedEntityManager extends EntityManager {
public function createQuery($dql = '') {
$query = parent::createQuery($dql);
$query->useResultCache(true);
}
}