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