2017-08-10 97 views
0

我有一個問題sonata_type_model_list和繼承實體。奏鳴曲sonata_type_model_list和繼承實體

我有這些實體

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

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 
{ 

,並提供實體

namespace AppBundle\Entity; 

use Application\Sonata\UserBundle\Entity\User; 

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

我做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]] 

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', 
       ], 

,當我試圖添加一個供應商,我得到一個錯誤

拋出了一個異常,同時處理:不可能在一個空調用一個方法 (「ID」) 「:形式:SonataDoctrineORMAdminBundle form_admin_fields.html.twig」在 變量在 線59

我要搜索和添加唯一供應商用戶轉到合同實體。 Sonata找不到提供者或用戶實體(NULL),我無法弄清楚如何在ContractAdmin中連接它。

我能在這裏做什麼?

在此先感謝。

回答

0

我的解決方案是EntityType ::類,並避免奏鳴曲類型。它工作正常。

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' 
        ) 
       ], 

但我不知道爲什麼索納塔有麻煩。如果有人有解釋或更好的解決方案,請寫在這裏。