我如何使用静态方法中的学说

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