【发布时间】:2015-10-14 19:06:34
【问题描述】:
我发布了另一个 question 试图找到一种方法来静态访问自定义“帮助器”类中控制器之外的存储库类。
到目前为止,我想出如何实现这一点的唯一方法是使用下面的代码。如果有人想提出关于“最佳实践”或“设计模式”的其他问题,请这样做。
我打开这个问题是为了寻找在 symfony 启动时加载单例服务(?)的最佳方法,以便其他类可以静态访问它而无需任何依赖注入。我没有找到任何官方文档或常见做法的运气。我知道单例是反实践的,但是下面的方法是最好的方法,还是有更理想的解决方案?
services.yml
parameters:
entity.device: Asterisk\DbBundle\Entity\Device
services:
asterisk.repository.device:
class: Asterisk\DbBundle\Entity\Repositories\DeviceRepository
factory: ["@doctrine.orm.asterisk_entity_manager", getRepository]
arguments:
- %entity.device%
tags:
- {name: kernel.event_listener, event: kernel.request, method: onKernelRequest}
设备存储库
class DeviceRepository extends \Doctrine\ORM\EntityRepository
{
/** @var ExtendedEntityRepository */
protected static $instance;
public function __construct(EntityManager $entityManager, ClassMetadata $class)
{
parent::__construct($entityManager, $class);
if(static::$instance instanceof static == false)
static::$instance = $this;
}
public static function getInstance()
{
return static::$instance;
}
public function onKernelRequest($event)
{
return;
}
}
【问题讨论】:
标签: php symfony inversion-of-control