2016-09-21 3 views
0

Я хочу представить отношение один ко многим для сохранения заказа на поставку с помощью заказа на поставку deatils.So Я попытался добавить подробный список заказов на покупку, увеличив строку таблицы для каждой детали. , я разработал PurchaseOrderDetailType тип формы следующим образомНе удалось загрузить Пользовательское поле формы Тип в Symfony 3

class PurchaseOrderDetailType extends AbstractType{ 


    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder->add('item',EntityType::class, array(
     'class' => 'AppBundle:InvtItem', 
     'query_builder' => function (EntityRepository $er) { 
      return $er->createQueryBuilder('item') 
       ->orderBy('item.description', 'ASC'); 
     }, 
     'choice_label' => 'description', 
    )) 
     ->add('unit_price') 
     ->add('qty') 
     ->add('price'); 

    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\PurchaseOrderDetails' 
    )); 
    } 
} 

Тогда я использует его в классе PurchaseOrderType как этот

class PurchaseOrderType extends AbstractType 
    { 
     /** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('supplier',EntityType::class, array(
      'class' => 'AppBundle:Supplier', 
      'label'=>'Supplier', 
      'query_builder' => function (EntityRepository $er) { 
       return $er->createQueryBuilder('supplier') 
        ->orderBy('supplier.name', 'ASC'); 
      }, 
      'choice_label' => 'name', 
     )) 
     ->add('purchaseOrderDetails',CollectionType::class,array(
      'entry_type' => PurchaseOrderDetailType::class, 
      'allow_add' => true 
     )) 
     ->add('status'); 
} 

/** 
* @param OptionsResolver $resolver 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'AppBundle\Entity\PurchaseOrder' 
    )); 
} 
} 

Тогда я получил эту ошибку => не удалось загрузить тип «PurchaseOrderDetailType» 500 Внутренняя ошибка сервера - InvalidArgumentException

+0

Так что, если вы используете Symfony 3 или Symfony 2.8 и синтаксис EntityType :: класс, вы должны поставить - 'использовать Symfony \ Мост \ Doctrine \ Form \ Type \ EntityType; ' –

+0

Да, я правильно импортировал все библиотеки. Я не упоминал их здесь. – Sameera

ответ

2

Это может быть из-за этого -

EntityType поле - специальное поле ChoiceType, который предназначен для загрузки опции из сущности доктрины.

Тип предприятия есть только один необходимый параметр: объект, который должен быть перечислены в поле выбора:

В качестве примера

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
// ... 

$builder->add('users', EntityType::class, array(
    // query choices from this entity 
    'class' => 'AppBundle:User', 

    // use the User.username property as the visible option string 
    'choice_label' => 'username', 

    // used to render a select box, check boxes or radios 
    // 'multiple' => true, 
    // 'expanded' => true, 
)); 

Таким образом, вы должны использовать следующий в начале ,

use Symfony\Bridge\Doctrine\Form\Type\EntityType; 

И

Попробуйте заменить EntityType::class на entity.

Update:

Я думаю, в Symfony 3 вам нужно использовать FQCN (полное имя класса) вместо экземпляра формы (или ссылку строки на службу).

+0

Я сделал ваши предложения, но такая же ошибка все еще происходит. – Sameera

+0

Я хочу зарегистрировать типы пользовательских форм? – Sameera

+0

Вы можете видеть, что я использовал FQCN все время. – Sameera

0

Я просто пропустил имен для класса PurchaseOrderDetailType