Symfony sonata使使格式映射器项具有逻辑条件可编辑


Symfony sonata make make formmapper item editable with logical condition

我有一个非常小的问题symfony,但我只是不知道现在如何开始。我现在在写代码的时候不断地改变,从来没有完成一个实际的事情。

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

现在,日程表类型为datetime。一个cronjob,以便在调度匹配当前白天时执行代码。

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

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

  1. 我应该创建一个自定义模板来覆盖默认的编辑和构建逻辑使用树枝吗?
  2. 在configureListField应该创建一个自定义的动作链接到一个自定义模板?
  3. 我应该创建一个自定义控制器让控制器决定,如果是这样,我可以保持我的configureListField和configureShowField在管理完整或应该列表和创建也通过这个控制器完成?

谢谢!

我终于解决了

我还尝试的是获得您添加到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'));