我已经使用 YAML 驱动程序定义了我的实体:
My\Entity\Section:
type: entity
table: section
repositoryClass: My\Entity\SectionRepository
如您所见,我指定了一个自定义存储库类。我正在使用结果缓存,我希望完全控制缓存 TTL,即$frontCacheTtl
在不同的存储库之间共享参数。
这是一个示例存储库,但是我真的不知道在通过以下方式获取存储库时如何将参数传递给构造函数$entityManager->getRepository('My\Entity\Section')
:
use Doctrine\ORM\EntityRepository;
class SectionRepository extends EntityRepository
{
public function __construct($frontCacheTtl)
{
$this->frontCacheTtl = $frontCacheTtl;
}
public function findAllForFront()
{
$query = $this->createQueryBuilder('s')
->select(array('s.slug', 's.title', 's.meta_description'))
-getQuery();
$query->useResultCache(true);
$query->setResultCacheLifetime($this->frontCacheTtl);
return $query->getArrayResult();
}
}
如果重要,我正在使用 SIlex。
编辑:一种解决方案(但我不喜欢它......)将是:
$app['repository.factory'] = $app->protect(function ($entityClass) use ($app) {
// The entity manager (using DoctrinOrmServiceProvider)
$repository = $app['orm.em']->getRepository($entityClass);
// Call setters i.e. dependency injection
$repository->setFrontCacheTtl($app['front_cache_ttl']);
return $repository;
});