首页 文章

如何在symfony 3中为存储库类配置依赖项注入

提问于
浏览
6

Symfony生成器生成以下类库:

namespace AppBundle\Repository;
use AppBundle\Entity\GroupEntity;

/**
 * GroupEntityRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class GroupEntityRepository extends \Doctrine\ORM\EntityRepository
{


}

services.yml:

group_entity_repository:
         class: AppBundle\Repository\GroupEntityRepository
         arguments: ["@doctrine.orm.entity_manager", AppBundle\Entity\GroupEntity]

我错误地配置了services.yml,但我现在不知道如何使用第二个参数 . 所以我得到错误:

可捕获的致命错误:传递给Doctrine \ ORM \ EntityRepository :: __ construct()的参数2必须是Doctrine \ ORM \ Mapping \ ClassMetadata的实例,在E:\ other \ dropbox \ Dropbox \ programavimas \ kodo pavyzdziai中调用的字符串第1626行的\ htdocs \ users_admin_demo \ var \ cache \ dev \ appDevDebugProjectContainer.php并定义

怎么解决?我在文档中看不到,它只显示了生成器和最终生成的类的代码,但没有显示服务配置 .

2 回答

  • 15

    Recommended as of Symfony 3.3:

    从Symfony 3.3开始,建议使用实际的类名作为服务ID(read thisthis) .

    AppBundle\Repository\GroupEntityRepository:
        factory: 'Doctrine\ORM\EntityManagerInterface:getRepository'
        arguments:
            - AppBundle\Entity\GroupEntity
    

    Original answer:

    您可以像这样配置存储库服务:

    group_entity_repository:
        class: AppBundle\Repository\GroupEntityRepository
        factory: ["@doctrine.orm.entity_manager", getRepository]
        arguments:
            - AppBundle\Entity\GroupEntity
    

    您可能永远不想自己调用存储库构造函数 . 因此,这种方法只使用entity_manager来获取存储库 . 服务容器基本上使用此代码来获取存储库:

    $container->get('doctrine.orm.entity_manager')->getRepository('AppBundle\Entity\GroupEntity');
    
  • 0

    示例SF 3.4如何在xml中制作:

    <service id="vop.sales.payment.entity_repository.billing_status"
                     class="Vop\Sales\PaymentBundle\Entity\BillingStatusRepository">
                <factory service="doctrine.orm.entity_manager" method="getRepository"/>
                <argument>Vop\Sales\PaymentBundle\Entity\BillingStatus</argument>
            </service>
    

相关问题