簡體   English   中英

如何在symfony2類中實例化教義實體管理器

[英]How to instance doctrine entity manager in a symfony2 class

我是Symfony 2和Doctrine的新手。

我在symfony項目上創建了一個新類,該類位於:

project_folder/src/Libraries/Validarcontenido/Validarcontenido.php

我需要在此類中獲取Doctrine Entity Manager實例。

我已經閱讀了有關它的文檔,每個人都說我必須將該類添加到services.yml文件中,但是沒有用。

這是我的代碼:

<?php

namespace Libraries\Validarcontenido;

use AdminBundle\Entity\Aportes;

use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\Request;

class Validarcontenido
{
    private $request, $post, $em;

    public function __construct()
    {
        $this->request = Request::createFromGlobals();
        $this->post = $this->request->request->all();

        // gets doctrine instance
        $this->em = $this->getContainer()->get('doctrine');
    }

}

services.yml

# Learn more about services, parameters and containers at
# http://symfony.com/doc/current/book/service_container.html
parameters:
#    parameter_name: value

services:
    validarcontenido.service:
        class: Libraries\Validarcontenido\Validarcontenido
        arguments: [@doctrine.orm.entity_manager]

但是Symfony向我返回此錯誤消息:

 Attempted to call an undefined method named "getContainer" of class "Libraries\Validarcontenido\Validarcontenido".
500 Internal Server Error - UndefinedMethodException 

我做錯了什么? 非常感謝。

您必須使用構造函數來設置實體管理器:

class Validarcontenido
{
    private $request, $post, $em;

    public function __construct(EntityManager $em)
    {
        $this->request = Request::createFromGlobals();
        $this->post = $this->request->request->all();
        $this->em = $em;
    }

}

您需要像以前一樣在service.yml中將類作為服務創建,只有差不多了。

您需要按以下方式更改課程:

<?php

namespace Libraries\Validarcontenido;

use AdminBundle\Entity\Aportes;

use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\Request;

class Validarcontenido
{
    private $request, $post, $em;

public function __construct(EntityManager $em)
{
    $this->request = Request::createFromGlobals();
    $this->post = $this->request->request->all();

    // gets doctrine instance
    $this->em = $em;
}

}

這是一個工作示例(提供了容器): https : //codedump.io/share/tpxgpEMJnaiW

好的,問題是當我在控制器中創建服務實例時,我使用了以下方法:

$my_class = new My_class();

現在我知道我必須使用這個:

$my_class = $this->get('service_name');

非常感謝!

暫無
暫無

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

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