没有为类DateTime定义实体管理器

时间:2014-01-25 17:11:42

标签: symfony symfony-forms sonata-admin symfony-sonata

我已经开始使用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时设置日期)将实现隐藏到用户。

一切都适用于创建,删除和读取,当涉及到修改实体时,我在stacktrace中收到此消息:

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尝试使用实体值填充表单而发布日期是DateTime,而在表单规范中我写了sonata_type_model_hidden?如果是这样,我怎么能绕过这个?

1 个答案:

答案 0 :(得分:1)

sonata_type_model_hidden不仅仅是hidden字段创建者,根据文档:

  

sonata_type_model_hidden将使用ModelHiddenType的实例来渲染隐藏字段。隐藏字段的值是相关实体的标识符。

如果我了解您的问题,您只想在字段published == true

时设置发布日期

您可以将实体preSave/preUpdate生命周期回调用于eaxmple

public function preSave() 
{
     /**
      * Check if item is published
      */
     if($this->getPublished()) {
         $this->setPublishingDate(new \DateTime());
     } else {
         $this->setPublishingDate(null);
     }
}

并从SonataAdmin表单中删除publishingDate字段。