首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sonata批准功能

Sonata批准功能
EN

Stack Overflow用户
提问于 2015-06-03 11:37:18
回答 1查看 99关注 0票数 0

我有一个包含评论的实体。它的结构很简单

代码语言:javascript
复制
sent_at | DateTime
comment_author | Text
comment_text | Text
approved_at | DateTime (null when the comments is inserted)

我已经建立了奏鸣曲,我现在可以管理评论。

“编辑”页面有一组下拉列表,用于设置字段approved_at的日期和时间,我想要做的是在“编辑”页面中设置一个复选框,如果选中该复选框,将当前的日期和时间保存在approved_at中。

我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-03 12:02:13

SonataAdminBundle提供3 Saving hooks。直接来源于文件:

代码语言:javascript
复制
new object : prePersist($object) / postPersist($object)
edited object : preUpdate($object) / postUpdate($object)
deleted object : preRemove($object) / postRemove($object)

所以,你感兴趣的是preUpdate()

为了实现您想要的结果,您必须向表单中添加新的non-mapped字段:

代码语言:javascript
复制
 // This is needed to check the checkbox if the message has been already approved
 $approved = false;

 $review = $this->getSubject();

 if ($review->getApprovedAt()) {
    $approved = true;
 }

 [..]

 $builder->add('approve', 'checkbox',
     array(
          // We don't need this as property in our entity.
          'mapped' => false,
          // The field should not be required, so that you can skip approving specific comment at the time
          'required' => false,
          'data' => $approved
     )
 );

现在,您所要做的就是读取update上的值,并在选中时设置日期时间:

代码语言:javascript
复制
 public function preUpdate($object) {
      /* @var $isApproved boolean */
      $isApproved = $this->getForm()->get('approve')->getData();

      if( $isApproved ) {
          $object->setApprovedAt( new \DateTime('now') );
      }
 }

这应该能起作用。文档中的章节- 这里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30618992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档