2016-09-21 1 views
0

Je veux représenter relation un à plusieurs persister bon de commande avec ordre d'achat deatils.So J'ai essayé d'ajouter la liste d'achat de détail de la commande par incrément d'une ligne de table pour chaque detail.For que , j'ai développé sous forme PurchaseOrderDetailType de type comme suitImpossible de charger champ de formulaire personnalisé Tapez 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' 
    )); 
    } 
} 

J'utilise en classe PurchaseOrderType comme celui-ci

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' 
    )); 
} 
} 

Je suis arrivé cette erreur => Impossible de charger le type "PurchaseOrderDetailType" 500 Internal Server Error - InvalidArgumentException

+0

Donc, si vous utilisez Symfony 3 ou Symfony 2.8 et la EntityType :: syntaxe de classe, vous devez mettre - 'utiliser Symfony \ pont \ Doctrine \ Form \ type \ EntityType, ' –

+0

ouais j'ai importé toutes les bibliothèques correctly.I ne les mentionner ici. – Sameera

Répondre

2

Il peut être à cause de cela -

EntityType Champ - Un champ de ChoiceType spécial qui est conçu pour charger les options d'une entité Doctrine.

Le type d'entité n'a qu'une seule option requise: l'entité qui doit être répertorié dans le champ de choix:

Un exemple

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, 
)); 

Vous devez utiliser suivant au début .

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

Et

Essayez de remplacer EntityType::class par entity.

Mise à jour:

Je pense, Symfony 3 vous devez utiliser FQCN (nom de classe entièrement qualifié) au lieu d'une instance de la forme (ou une référence de chaîne à un service).

+0

J'ai fait vos suggestions mais la même erreur persiste. – Sameera

+0

Est-ce que je veux enregistrer des types de formulaires personnalisés? – Sameera

+0

Vous pouvez voir que j'ai utilisé FQCN tout le temps. – Sameera

0

Je viens de manquer l'espace de noms pour la classe PurchaseOrderDetailType