Sonata sonata_type_model_list和继承实体

时间:2017-08-10 08:05:20

标签: sonata-admin sonata-user-bundle

我的 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”)在null变量中   “SonataDoctrineORMAdminBundle:Form:form_admin_fields.html.twig”at at   第59行

我想搜索并仅将提供者用户添加到Contract实体。 Sonata找不到Provider或User实体(NULL),我无法弄清楚如何在ContractAdmin中连接它。

我可以在这做什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我的解决方案是EntityType :: class并避免使用Sonata类型。它工作正常。

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

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