2015-11-26 4 views
0

Я строю формы в Symfony 2. Я обновляю сайт, где я нашел, что я Обязательное сделал новый:Пустой EntityManager QueryBuilder ошибка

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

в новом файле.

Теперь я продублировал существующий файл формообразователя, который работает. (Ofcours я изменил параметры и значения). Это то, что функция общественного 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")); 
} 

эм создается над 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(); 

Я понятия не имею, почему это происходит. Это то же самое, что и у моих других разработчиков форм.

+0

Посмотрите на «Контроллер», который использует форму, которую вы скопировали. Вы должны увидеть, что 'em' передается там в качестве аргумента. Если это так, сделайте то же самое и в другом контроллере. – Artamiel

+0

Вам необходимо объявить свой класс и его требования в конфигурации контейнерного сервиса – Calimero

+0

Я нашел его thnx для вас @Artamiel. Мне нужно было отправить значение с запросом formbuilder! Если вы ответите на этот вопрос, я могу принять его. – yesbe97

ответ

0

Как я уже сказал в своем комментарии, EntityManager вводится в форму либо с вашего Controller, когда форма инициализируется new MyForm(). Вы также можете использовать третий параметр array $options = array(), чтобы передать диспетчер сущности, и он будет доступен в buildForm.

Администратор также может быть введен, если форма зарегистрирована в вашем файле конфигурации в качестве службы, таким образом добавив служебный идентификатор в параметр arguments.

Итак, есть много способов пройти EntityManager, вам просто нужно выяснить, какой именно вам подходит. В вашем случае это должно быть передано при инициализации в вашем контроллере или в качестве аргумента в вашем файле конфигурации.

Смежные вопросы