2017-08-10 1 views
0

Ich habe ein Problem mit sonata_type_model_list und Vererbungsentität.Sonata sonata_type_model_list und Vererbungsentität

Ich habe diese Einheiten

/** 
* @ORM\Entity() 
*/ 
class Contract 
{ 
    /** 
    * @var Provider 
    * 
    * @ORM\ManyToOne(targetEntity="Provider") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="provider_id", referencedColumnName="id") 
    * }) 
    */ 
    private $provider; 
... 
} 

und

use Sonata\UserBundle\Entity\BaseUser as BaseUser; 
/** 
* User 
* 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="user_type", type="string") 
* @ORM\DiscriminatorMap(
*  { 
*  "app_user" = "User", 
*  "provider" = "AppBundle\Entity\Provider", 
*  } 
*) 
* @ORM\Table(name="fos_user_user", options={"charset"="utf8", "collate"="utf8_bin"}) 
*/ 
class User extends BaseUser 
{ 

und Provider Entity

namespace AppBundle\Entity; 

use Application\Sonata\UserBundle\Entity\User; 

/** 
* @ORM\Entity() 
*/ 
class Provider extends User 
{ 

Ich habe ContractAdmin

admin.contract: 
     class: AppBundle\Admin\ContractAdmin 
     arguments: [~, AppBundle\Entity\Contract, ~] 
     tags: 
      - { name: sonata.admin, manager_type: orm, label: label.contracts, group: label.contracts } 
     calls: 
      - [setTranslationDomain, [SonataAdminBundle]] 

und

use Sonata\AdminBundle\Admin\AbstractAdmin; 

class ContractAdmin extends AbstractAdmin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper->add(
       'provider', 
       'sonata_type_model_list', 
       [ 
        'class' => 'AppBundle\Entity\Provider', 
       ], 

und wenn ich einen Provider hinzufügen versuchte, bekam ich einen Fehler

eine Ausnahme ausgelöst wurde, während der Handhabung: Impossible ein Verfahren („id“) auf einem null aufzurufen Variable in "SonataDoctrineORMAdminBundle: Form: form_admin_fields.html.twig" auf Linie 59

ich möchte nur Anbieter suchen und hinzufügen Benutzer zu Vertragsunternehmen. Sonata kann Provider- oder User-Entity (NULL) nicht finden und ich kann nicht herausfinden, wie man dies in ContractAdmin verbindet.

Was kann ich hier tun?

Vielen Dank im Voraus.

Antwort

0

Meine Lösung ist EntityType :: Klasse und vermeiden Sie Sonatentypen. Es funktioniert gut.

class ContractAdmin extends AbstractAdmin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper->add(
       'provider', 
       EntityType::class, 
       [ 
        'class' => 'AppBundle\Entity\Provider', 
        'choice_label' => 'username', 
        'attr' => array(
         'data-sonata-select2' => 'true' 
        ) 
       ], 

Aber ich weiß nicht, warum Sonata Probleme hat. Wenn jemand eine Erklärung oder eine bessere Lösung hat, schreiben Sie bitte hier.