Symfony奏鸣曲使formmapper项目可编辑,逻辑条件

时间:2016-11-01 14:01:58

标签: php symfony sonata-admin symfony-sonata

我有一个非常小的symfony问题,但我现在根本不知道怎么开始。我现在在编码时不断改变,从不完成实际的事情。

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('id')
        ->add('schedule');
}

现在,schedule是type datetime。一个cronjob,以便在计划与当前白天匹配时执行代码。

管理员只需要能够在将来更改计划日期时间,因此read_only应该在过去发生时设置为true。

小问题,但我不知道这样做的最佳方法是什么?我可以想到多种解决方案:

  1. 我应该使用twig创建自定义模板来覆盖默认的编辑和构建逻辑吗?
  2. 在configureListField中应该创建一个链接到自定义模板的自定义操作吗?
  3. 我应该创建一个自定义控制器来让控制器决定,如果是这样,我可以保持我的configureListField和configureShowField在admin中完整或者应该列出并创建也可以通过这个控制器完成吗?
  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

我终于解决了它

我还尝试过的是获取您添加到formmapper中的内容的价值。

//todo get value
$formMapper
  ->add('date')

所以我决定在configureFormField函数中做一个var_dump。

protected function configureFormFields(FormMapper $formMapper)
{
   die("DIED ".var_dump($this)." DIED @".__FILE__." line ".__LINE__);
}

在var_dump中,我找到了一个名为subject的变量,在该主题中,可以存储您可以添加到formmapper的所有信息。

您可以使用以下方式获得主题:

$this->getSubject()

您可以在主题内处理它,就像您尝试编辑的实体一样。就我而言,这是时间表。

if ($this->getSubject->getSchedule > new \Datetime('now')
{
  $formMapper
     ->add('channel', null, array('label' => 'Choose a channel'));
else
{
  $formMapper
     ->add('channel', null, array('label' => 'Channel', 'read_only' => 'true'));