簡體   English   中英

在某些情況下無法將EntityManager注入構造函數

[英]Can't inject EntityManager to constructor in some circumstances

我遇到一些奇怪的情況。 我已經定義了一項服務,並將其提供給EntityManager作為Controller構造函數的參數。 當我嘗試在其他構造函數中獲取服務(即構造函數)時,一切正常。 但是當我直接打開作為服務的構造函數時,我看到:

ContextErrorException: Catchable Fatal Error: Argument 1 passed to 
Webrama\PbsTreeBundle\Controller\PbsTreeController::__construct() must be an instance 
of Doctrine\ORM\EntityManager, none given, called in 
C:\www\strefaurody\bb\app\cache\dev\classes.php on line 2374 and defined in 
C:\www\strefaurody\bb\src\Webrama\PbsTreeBundle\Controller\PbsTreeController.php
 line 16

我的services.yml看起來像這樣:

services:
    pbs_tree_controller:
        class: Webrama\PbsTreeBundle\Controller\PbsTreeController
        arguments:
            entityManager: "@doctrine.orm.entity_manager

構造函數也很簡單:

private $em;

        public function __construct(EntityManager $entityManager)
        {
            $this->em = $entityManager;
        }

奇怪的是我正在從服務中調用方法,該服務使用此方法成功地注入了構造函數EntityManager實例:

public function genratePbsTree()
        {

            $conn = $this->em->getConnection();

            $sql = "SELECT id_child AS id, TRIM(TRAILING '/' FROM path) AS path FROM pbs_node_to_node WHERE depth = 2";
            $stmt = $conn->prepare($sql);
            $stmt->execute();
            $result = $stmt->fetchAll();

            return $result;
        }

根據要求有一個路由YML:

webrama_pbs_index:
    pattern:  /{page}
    defaults: { _controller: WebramaPbsTreeBundle:PbsTree:index, page: 1 }
    requirements:
      page:  \d+

webrama_pbs_brand_edit:
    pattern: /edit/{id}
    defaults: { _controller: WebramaPbsTreeBundle:PbsTree:edit, id: '' }
    requirements:
      id:  \d+
    options:
          expose: true

webrama_pbs_producer_add:
    pattern: /add/producer
    defaults: { _controller: WebramaPbsTreeBundle:PbsTree:addProducer }

webrama_pbs_series_add:
    pattern: /add/series
    defaults: { _controller: WebramaPbsTreeBundle:PbsTree:addSeries }

webrama_pbs_brand_add:
    pattern: /add/brand
    defaults: { _controller: WebramaPbsTreeBundle:PbsTree:addBrand }

您在路由配置中使用“控制器”符號:

_controller: WebramaPbsTreeBundle:PbsTree:index

如果要“控制器即服務”,則需要使用服務名稱:

_controller: pbs_tree_controller:indexAction

在此處閱讀更多信息: http : //symfony.com/doc/current/cookbook/controller/service.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM