2017-08-10 45 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' 
        ) 
       ], 

但我不知道为什么索纳塔有麻烦。如果有人有解释或更好的解决方案,请写在这里。