Sonata Admin 带有数据转换器的自定义字段

Posted

技术标签:

【中文标题】Sonata Admin 带有数据转换器的自定义字段【英文标题】:Sonata Admin Custom field with data transformer 【发布时间】:2014-09-27 03:04:42 【问题描述】:

我有一个带有数据转换器的简单表单,它可以正常工作(更新、持久化和删除),但在树枝上出现错误。

不可能在 SonataDoctrineORMAdminBundle:CRUD:edit_orm_one_to_many.html.twig 第 30 行的 NULL 变量 ("") 上调用方法 ("trans")

错误在这一行:

nested_field.vars['sonata_admin'].admin.trans(nested_field.vars.label)

所有字段在nested_field.vars['sonata_admin'] 中都有值,减去我的自定义字段

我的代码是这样的:

    $formMapper
            ->add(
                $formMapper->create('articleAmount', 'text')
                    ->addModelTransformer($articleAmountToStringTransformer)
            )
           ...

实体

    /**
     * AppShopHasArticles
     *
     * @ORM\Table(name="app_shop_has_articles")
     * @ExclusionPolicy("all")
     * @ORM\Entity(repositoryClass="Nvia\ShopAppBundle\Entity\Repository\AppShopHasArticlesRepository")
     * @ORM\HasLifecycleCallbacks()
     */
    class AppShopHasArticles
    

        /**
         * @var \Nvia\CommonBundle\Entity\Article
         *
         * @ORM\ManyToOne(targetEntity="Nvia\ShopAppBundle\Entity\Article", inversedBy="appShopHasArticles")
         * @ORM\JoinColumn(name="article_id", referencedColumnName="id", nullable=false)
         * @ORM\Id
         * @Expose
         */
        private $article;

        /**
         * @var \Nvia\CommonBundle\Entity\Country
         *
         * @ORM\ManyToOne(targetEntity="Nvia\CommonBundle\Entity\Country")
         * @ORM\JoinColumn(name="country_id", referencedColumnName="id", nullable=false)
         * @ORM\Id
         * @Expose
         */
        private $country;

        /**
         * @var \Nvia\ShopAppBundle\Entity\AppShop
         *
         * @ORM\ManyToOne(targetEntity="Nvia\ShopAppBundle\Entity\ArticleAmount")
         * @ORM\JoinColumns(
         *   @ORM\JoinColumn(name="country_id", referencedColumnName="country_id", nullable=false),
         *   @ORM\JoinColumn(name="article_id", referencedColumnName="article_id", nullable=false)
         * )
         * @Expose
         */
        private $articleAmount;


        ...
    

    /**
     * ArticleAmount
     *
     * @ORM\Table(name="article_amount")
     */
    class ArticleAmount
    
        /**
         * @var \Nvia\CommonBundle\Entity\Article
         *
         * @ORM\ManyToOne(targetEntity="Nvia\ShopAppBundle\Entity\Article", inversedBy="articleAmounts")
         * @ORM\JoinColumn(name="article_id", referencedColumnName="id", nullable=false)
         * @ORM\Id
         */
        private $article;

        /**
         * @var \Nvia\CommonBundle\Entity\Country
         *
         * @ORM\ManyToOne(targetEntity="Nvia\CommonBundle\Entity\Country")
         * @ORM\JoinColumn(name="country_id", referencedColumnName="id", nullable=false)
         * @ORM\Id
         */
        private $country;

        /**
         * @var float
         *
         * @ORM\Column(name="amount", type="float", precision=10, scale=0, nullable=false)
         * @Expose
         */
        private $amount;


        /**
         * @var \DateTime
         *
         * @ORM\Column(name="created_at", type="datetime", nullable=false)
         */
        private $createdAt;

    

我做错了什么:/?

【问题讨论】:

【参考方案1】:

使用formMapper奏鸣曲的create方法时不会插入自己的逻辑。

不如试试这样的

   $formMapper
        ->add('articleAmount', 'text')
        ->get('articleAmount')
        ->addModelTransformer($articleAmountToStringTransformer)

在奏鸣曲 2.4 上测试

【讨论】:

以上是关于Sonata Admin 带有数据转换器的自定义字段的主要内容,如果未能解决你的问题,请参考以下文章

需要一些关于自定义字符表的帮助和提示

Symfony Sonata Admin Bundle - 将带有树枝模板的自定义字段导出到 XLS

自定义日期范围字段 Sonata Admin

在 Symfony 2 项目的 Sonata Admin 中使用自定义视图页面进行图像预览

Sonata Admin 中没有自定义视图的面包屑?

Sonata admin-bundle - 没有注销导航栏