我正在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一样。
答案 0 :(得分:0)
正如我在评论中所说的那样,EntityManager
会在使用Controller
初始化表单时从new MyForm()
注入表单。您还可以使用第三个参数array $options = array()
来传递实体管理器,并且可以在buildForm
中访问它。
如果表单作为服务在配置文件中注册,也可以注入管理器,从而在arguments
选项中添加服务ID。
所以,有很多方法可以通过EntityManager
,你只需要找出最适合你的方法。在您的情况下,它应该在控制器中的初始化时传递,或者作为配置文件中的参数传递。