空EntityManager QueryBuilder错误

时间:2015-11-26 09:33:52

标签: php symfony entity formbuilder

我正在Symfony 2中构建一个表单。我正在更新一个网站,在那里我发现它是新的:

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

在一个新文件中。

现在我复制了一个有效的现有formbuilder文件。(Ofcours我更改了参数和值)。 这就是public formbuilder函数的样子:

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一样。

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说的那样,EntityManager会在使用Controller初始化表单时从new MyForm()注入表单。您还可以使用第三个参数array $options = array()来传递实体管理器,并且可以在buildForm中访问它。

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

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