我总是使用来自控制器或实体存储库类的doctrine,现在我试图从静态类中使用它,但我找不到任何关于如何执行id的示例。 基本上我需要(我认为)一种在静态方法中创建实体管理器的方法。
感谢 中号
答案 0 :(得分:3)
你可以调用一个setter函数,注入实体管理器,你可以调用静态方法:
<强> myController的强>
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();
}
}
答案 1 :(得分:0)
我到这里来看看如何从Form内部查询数据库,以为我可能需要带有静态方法的自定义类。如果有人觉得这有用,我就知道我们可以从控制器将EntityManager传递给表单对象($ form = $ this-> createForm(TaskType :: class,$ task,['entity_manager'=> entityManager]))( https://symfony.com/doc/4.1/form/form_dependencies.html)。
答案 2 :(得分:-3)
我不确定你的问题是什么意思静态类/方法,一些代码示例可能会有所帮助。但是你可以将这个类声明为一个服务,听起来它可能就是这样,然后将实体管理器作为依赖注入。
services.yml
services:
my_service:
class: Acme\AppBundle\Services\MyService
arguments: ["@doctrine.orm.entity_manager"]
然后在你的班级中你将拥有这样的实体经理:
<?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();