我發佈了另一個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