空 EntityManager QueryBuilder 错误

Empty EntityManager QueryBuilder error

我正在 Symfony 2 中构建一个表单。我正在更新一个网站,我发现我创建一个新的网站是必要的:

public function buildForm(FormBuilderInterface $builder, array $options){

在新文件中。

现在我复制了一个可用的现有 formbuilder 文件。(有时我更改了参数和值)。 这是 public 表单生成器函数的样子:

SerialNumberType.php

public function buildForm(FormBuilderInterface $builder, array $options){
    $query = $this->em->createQueryBuilder();
    $query->select('*')
        ->from('AppBundle:SerialNumber', 'sn');

    $serialnumbers = $query->getQuery()->getResult();

    $options = array();
    foreach($serialnumbers as $serialnumber){
        $options[$serialnumber['id']] = $serialnumber['id'];
        $options[$serialnumber['product_revision_id']] = $serialnumber['product_revision_id'];
        $options[$serialnumber['booking_id']] = $serialnumber['booking_id'];
        $options[$serialnumber['serial_nr']] = $serialnumber['serial_nr'];
    }

    $builder->add("serial_nr", "text", array("label" => "Serienummer"));
}

em 是在 formbuilder 之上创建的,看起来像这样:

/**
 * @var EntityManager $em
 */
protected $em;

public function __construct($em) {
    $this->em = $em;
}

我确实用它来:

use Doctrine\ORM\EntityManager;

现在,当我尝试请求函数 buildForm 时,出现了这个错误:

Error: Call to a member function createQueryBuilder() on null" at mypath/SerialNumberType.php line 20

第20行表示SerialNumberType.php的这部分:

$query = $this->em->createQueryBuilder();

我不知道为什么会这样。这和我的其他 formbuilders 一样。

因此,正如我在评论中所说,当使用 new MyForm() 初始化表单时,EntityManager 会从您的 Controller 注入表单。也可以使用第三个参数array $options = array()传递实体管理器,在buildForm.

中可以访问

如果表单作为服务在配置文件中注册,管理器也可以被注入,从而在 arguments 选项中添加服务 ID。

所以,通过EntityManager的方法有很多种,你只需要找出最适合你的那一种即可。在您的情况下,它应该在控制器中初始化时传递,或者作为配置文件中的参数传递。