简体   繁体   English

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

[英]Sonata Admin Custom field with data transformer

I have a easy form with a data transformer, it works correctly (update, persist and delete) but I get a error on twig. 我有一个带有数据转换器的简单表单,它可以正常工作(更新,保持和删除),但我在树枝上得到一个错误。

Impossible to invoke a method ("trans") on a NULL variable ("") in SonataDoctrineORMAdminBundle:CRUD:edit_orm_one_to_many.html.twig at line 30 无法在SonataDoctrineORMAdminBundle中的NULL变量(“”)上调用方法(“trans”):第30行的CRUD:edit_orm_one_to_many.html.twig

error is in this line: 错误在这一行:

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

All fields have value in nested_field.vars['sonata_admin'] less my custom field 所有字段在nested_field.vars ['sonata_admin']中都有值,而不是我的自定义字段

My code is this: 我的代码是这样的:

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

Entities 实体

    /**
     * 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;

    }

What am I doing wrong :/ ? 我究竟做错了什么 :/ ?

When using the create method of the formMapper sonata will not insert it's own logic. 当使用formMapper的create方法时,sonata不会插入它自己的逻辑。

Instead try something like this 而是尝试这样的事情

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

Tested on Sonata 2.4 在Sonata 2.4上测试过

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM