【发布时间】:2023-03-05 14:01:02
【问题描述】:
我已经开始使用Sonata Admin 捆绑包,我正在按照示例说明如何将实体与捆绑包映射以创建管理界面。
我创建了一个名为 Post 的实体,这是配置 yml 文件:
Emiliano\PostsBundle\Entity\Post:
type: entity
table: null
repositoryClass: Emiliano\PostsBundle\Entity\PostRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
title:
type: string
column: Title
lenght: 100
published:
type: boolean
column: Published
publishingDate:
type: datetime
column: Publishing_Date
nullable: TRUE
lifecycleCallbacks: { }
然后在我的Admin 类中我有configureFormFields 方法:
protected function configureFormFields(FormMapper $formMapper) {
$formMapper->add('title', 'text')
->add('published', 'checkbox', array('required' => false))
->add('publishingDate', 'sonata_type_model_hidden');
}
我在奏鸣曲管理员documentation 上找到了sonata_type_model_hidden。我想要实现的是以编程方式处理发布日期(例如,仅在选中复选框 published 时设置日期)将实现隐藏给用户。
在创建、删除和读取方面一切正常,当涉及到修改实体时,我在堆栈跟踪中收到此消息:
No entity manager defined for class DateTime
In sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Model/ModelManager.php at line 214
如果我显示该字段一切正常,我也尝试使用:
->add('publishingDate', 'hidden');
没有成功。
这到底是什么问题?是因为Sonata Admin 试图用实体值填写表单,并且对于 publishingDate 有一个DateTime 而在表单规范中我写了一个sonata_type_model_hidden?如果是这样,我该如何规避呢?
【问题讨论】:
-
那么 ModelManager 的第 214 行是什么?我猜您可能使用的是 DateTime 而不是 \DateTime。纯属猜测。
-
$em = $this->registry->getManagerForClass($class);我正在使用 \DateTime。 -
然后检查你的代码,因为我很确定你有 $class= 'DateTime' 而且肯定不会有 $em 。
-
我实际上不明白这是奏鸣曲管理错误还是我忽略的东西,我没有创建表单,捆绑包映射我的实体创建管理界面并检查@987654336 @ 我写的,但我无处传递
DateTime对象。无论如何,我从之前的评论中检查了$class变量,它是DateTime,我试图将其更改为\DateTime,但没有成功。
标签: symfony symfony-forms sonata-admin symfony-sonata