如何在 symfony2 class 中实例化学说实体管理器

How to instance doctrine entity manager in a symfony2 class

我是 Symfony 2 和 Doctrine 的新手。

我在我的 symfony 项目上创建了一个新的 class,它位于:

project_folder/src/Libraries/Validarcontenido/Validarcontenido.php

我需要在这个 class 中获取 Doctrine Entity Manager 实例。

我阅读了有关它的文档,每个人都说我必须将 class 添加到 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 returns 我这个错误信息:

 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;
    }

}

您需要将 class 创建为 service.yml 中的一项服务,就像您已经做的那样,只是您快完成了。

您需要将 class 更改为:

<?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');

非常感谢!