在Symfony2中的项目,当你使用一个控制器 ,可以通过调用访问主义 getDoctrine()
在this
,即:
$this->getDoctrine();
这样一来,我可以访问这种学说实体的存储库。
假设有一个通用的PHP类在Symfony2的项目。 我怎样才能找回主义 ? 我想,有这样的服务来获得它,但我不知道是哪一个。
在Symfony2中的项目,当你使用一个控制器 ,可以通过调用访问主义 getDoctrine()
在this
,即:
$this->getDoctrine();
这样一来,我可以访问这种学说实体的存储库。
假设有一个通用的PHP类在Symfony2的项目。 我怎样才能找回主义 ? 我想,有这样的服务来获得它,但我不知道是哪一个。
你可以注册这个类作为一个服务和任何其他服务注入到它。 假设你有GenericClass.php如下:
class GenericClass
{
public function __construct()
{
// some cool stuff
}
}
你可以为它服务注册(在你的包的Resources/config/service.yml|xml
通常情况下),并注入主义的实体管理器进去:
services:
my_mailer:
class: Path/To/GenericClass
arguments: [doctrine.orm.entity_manager]
它会尝试注入实体管理器(默认)的构造GenericClass
。 所以,你只需要添加的说法吧:
public function __construct($entityManager)
{
// do something awesome with entity manager
}
如果你不知道什么服务在您的应用程序的DI容器可用,您可以通过使用命令行工具找出: php app/console container:debug
,它会用它们的别名和课程列出所有可用的服务。
检查Symfony2的文档后,我想通了,如何通过你的服务在自定义的方法来打破默认行为。
重写你的configs是这样的:
services:
my_mailer:
class: Path/To/GenericClass
calls:
- [anotherMethodName, [doctrine.orm.entity_manager]]
因此,该服务现已在你的其他方法可用。
public function anotherMethodName($entityManager)
{
// your magic
}
从的Ondrej答案是绝对正确的,我只是想这一块拼图添加到该线程。