我如何使用静态方法中的学说
How can I use doctrine from a static method
我总是使用来自控制器或实体存储库 classes 的学说,现在我正尝试从静态 class 使用它,但我找不到任何关于如何使用 id 的示例.
基本上我需要(我认为)一种在静态方法中创建实体管理器的方法。
谢谢
M
根据你的问题,我不确定你所说的静态 class/method 是什么意思,一些代码示例可能会有所帮助。但是您可以将此 class 声明为一项服务,听起来它可能本来就是这样,然后将实体管理器作为依赖项注入。
services.yml
services:
my_service:
class: Acme\AppBundle\Services\MyService
arguments: ["@doctrine.orm.entity_manager"]
然后在您的 class 中,您将拥有像这样的实体管理器:
<?php
namespace Acme\AppBundle\Services;
use Doctrine\ORM\EntityManager;
class MyService
{
/**
* Entity Manager
*
* @var Doctrine\ORM\EntityManager
*/
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
...
}
然后您可以在您的控制器中使用此服务,如下所示:
$this->get('my_service')->doSomething();
您可以调用 setter 函数,注入实体管理器,在其中调用静态方法:
我的控制器
Class MyController extends Controller
{
public function newAction()
{
$entityManager = $this->getDoctrine()->getManager();
SomeClass::setEntityManager($entityManager);
$result = SomeClass::myStaticMethod();
}
}
SomeClass
Class SomeClass
{
private static $entityManager;
public static function setEntityManager($entityManager)
{
self::$entityManager = $entityManager;
}
public static function myStaticMethod()
{
return $entityManager->getRepository(SomeEntity::class)->findAll();
}
}
我总是使用来自控制器或实体存储库 classes 的学说,现在我正尝试从静态 class 使用它,但我找不到任何关于如何使用 id 的示例. 基本上我需要(我认为)一种在静态方法中创建实体管理器的方法。
谢谢 M
根据你的问题,我不确定你所说的静态 class/method 是什么意思,一些代码示例可能会有所帮助。但是您可以将此 class 声明为一项服务,听起来它可能本来就是这样,然后将实体管理器作为依赖项注入。
services.yml
services:
my_service:
class: Acme\AppBundle\Services\MyService
arguments: ["@doctrine.orm.entity_manager"]
然后在您的 class 中,您将拥有像这样的实体管理器:
<?php
namespace Acme\AppBundle\Services;
use Doctrine\ORM\EntityManager;
class MyService
{
/**
* Entity Manager
*
* @var Doctrine\ORM\EntityManager
*/
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
...
}
然后您可以在您的控制器中使用此服务,如下所示:
$this->get('my_service')->doSomething();
您可以调用 setter 函数,注入实体管理器,在其中调用静态方法:
我的控制器
Class MyController extends Controller
{
public function newAction()
{
$entityManager = $this->getDoctrine()->getManager();
SomeClass::setEntityManager($entityManager);
$result = SomeClass::myStaticMethod();
}
}
SomeClass
Class SomeClass
{
private static $entityManager;
public static function setEntityManager($entityManager)
{
self::$entityManager = $entityManager;
}
public static function myStaticMethod()
{
return $entityManager->getRepository(SomeEntity::class)->findAll();
}
}