如何在 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');
非常感谢!
我是 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');
非常感谢!