gpt4 book ai didi

Symfony2/JmsDIExtraBundle 使用注释将存储库注入(inject)到服务中

转载 作者:行者123 更新时间:2023-12-02 10:57:22 25 4
gpt4 key购买 nike

在我的项目中,我使用 JMSDIExtraBundle 注释。我的问题是:我如何告诉我的应用程序存储库应该是服务,这样我就可以使用注释将其注入(inject)到另一个服务中。我知道的唯一方法是使用 XML 文件将存储库定义为服务。但这是一个非常慢的过程(与简单的 @DI\Service 相比,我更喜欢在 yml 或 xml 文件中定义它)。

我找到了 XML 的替代解决方案,但我认为这是个坏主意:

   ####CustomService.php####
/**
* @param EntityManager $em
*
* @DI\InjectParams({
* "em" = @DI\Inject("doctrine.orm.entity_manager")
* })
*/
public function __construct(EntityManager $em) {
$this->em = $em;
}

以及服务中的某个地方:

$entityRepository = $this->em->getRepository(AcmeBundle:Entity);

当我需要使用存储库时,有什么想法可以加快编码过程吗?

最佳答案

您可以将实体存储库定义为服务并将其注入(inject)到服务中。

作为示例,您可以将存储库配置为服务,例如:

以标准的 Symfony 服务定义方式:

   ####service.xml####
<service id="acme.user.repository"
class="Doctrine\ORM\EntityRepository"
factory-service="doctrine.orm.entity_manager"
factory-method="getRepository">
<argument>AcmeDemoBundle:User</argument>
</service>

或者使用 JMSDiExtraBundle 中定义的工厂到服务注释(请参阅 this ):

/**
* @Service("acme.user.repository", factoryService = "doctrine", factoryMethod="getRepository", factoryMethodArguments={
* "persistentObjectName" = "Acme\DemoBundle\Entity\User"
* } )
*/

注入(inject)并将其用作:

   ####CustomService.php####
/**
* @param Doctrine\ORM\EntityRepository $repo
*
* @DI\InjectParams({
* "repo" = @DI\Inject("acme.user.repository")
* })
*/
public function __construct(EntityRepository $repo) {
$this->repo = $repo;
}

不是一个很大的加速,但只允许注入(inject)你需要的东西

希望这有帮助

关于Symfony2/JmsDIExtraBundle 使用注释将存储库注入(inject)到服务中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com