2016-09-21 1 views
0

Ich möchte eine Beziehung zwischen mehreren Beziehungen darstellen, um die Bestellung mit deatils.Persist.So habe ich versucht, Bestellungsdetailliste hinzuzufügen, indem Sie für jedes Detail eine Tabellenzeile erhöhen , I PurchaseOrderDetailType Formulartyp entwickelt alsBenutzerdefiniertes Formularfeld konnte nicht eingegeben werden. Geben Sie Symfony 3 ein.

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

Dann folge ich verwende es in PurchaseOrderType Klasse wie diese

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

Dann habe ich diesen Fehler => Typen kann nicht "PurchaseOrderDetailType" laden 500 Internal Server Error - InvalidArgumentException

+0

Also, wenn Sie Symfony 3 oder Symfony 2.8 und die EntityType :: Klasse Syntax verwenden, müssen Sie setzen - 'Symfony \ Brücke \ Lehre \ Formular \ Art \ verwenden EntityType; ' –

+0

yeah Ich habe alle Bibliotheken korrekt importiert. Ich habe sie hier nicht erwähnt. – Sameera

Antwort

2

Es weil dieser sein kann -

EntityType Feld - Ein besonderes Choice Feld, das entworfen ist Optionen aus einer Lehre Einheit zu laden.

Der Entitätstyp hat nur eine gewünschte Option: die Einheit, die in dem Auswahlfeld aufgeführt werden soll:

Ein Beispiel

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

Also muss man am Anfang nach dem Gebrauch .

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

Und

Versuchen EntityType::class durch entity ersetzen.

Update:

Ich denke, In Symfony 3 Sie benötigen FQCN (vollqualifizierten Klassennamen) zu verwenden, anstatt einer Instanz der Form (oder einem String Verweis auf einen Service).

+0

Ich habe Ihre Vorschläge gemacht, aber derselbe Fehler tritt immer noch auf. – Sameera

+0

Soll ich benutzerdefinierte Formulartypen registrieren? – Sameera

+0

Sie können sehen, dass ich FQCN die ganze Zeit verwendet habe. – Sameera

0

Ich vermisste nur den Namespace für die Klasse PurchaseOrderDetailType

Verwandte Themen