我发布了另一个question试图找到一种方法来静态访问自定义“帮助”类中的控制器外的存储库类。Syfmony - 启动加载服务
到目前为止,我已经想出了如何实现这一点的唯一方法是使用下面的代码。如果有人想要谈谈关于“最佳实践”或“设计模式”的其他问题,请做。
我打开这个问题,寻求在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}
DeviceRepository
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;
}
}
能详细介绍一下将repo服务注入内核侦听器吗?你在说我在做什么很好,但我应该注入一个内核侦听器,而不是每个作为内核侦听器的repo(就像我上面的示例代码)? – StrikeForceZero
您是否正在使用侦听器功能来设置存储库单例实例? – Cerad
是的,因为我知道没有其他方式可以在symfony靴子时加载它 – StrikeForceZero