空 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
的方法有很多种,你只需要找出最适合你的那一种即可。在您的情况下,它应该在控制器中初始化时传递,或者作为配置文件中的参数传递。
我正在 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
的方法有很多种,你只需要找出最适合你的那一种即可。在您的情况下,它应该在控制器中初始化时传递,或者作为配置文件中的参数传递。