【问题标题】:setting default value in symfony2 sonata admin bundle在 symfony2 sonata 管理包中设置默认值
【发布时间】:2012-05-19 17:51:05
【问题描述】:

如何在奏鸣曲管理包中设置默认值 configureFormFields 方法中缺少 data 选项

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name', null, array('required' => true, 'data' => "my default value"))
    ;
}

如何使用数据属性设置字段内的默认值???

【问题讨论】:

  • name 的 fieldType 是什么?

标签: symfony symfony-sonata


【解决方案1】:

我想您现在可能已经解决了这个问题,但是作为对其他任何人的引用,您可以覆盖 getNewInstance() 方法并为对象设置默认值:

public function getNewInstance()
{
    $instance = parent::getNewInstance();
    $instance->setName('my default value');

    return $instance;
}

【讨论】:

  • 正是我想要的。谢谢!
  • @RobMasters 如果我们需要显示的属性实际上是一个方法呢?
  • 当尝试以这种方式设置日期时间时 $instance->setCloseTimeUTC((new \DateTime())->format('Y-m-d H:i:s'));保存时出现错误“预期以下类型之一:null,DateTime”
【解决方案2】:

您也可以直接将默认值分配给实体的属性:

class TheEntity
{
    private $name = 'default name';
}

【讨论】:

  • 为什么这个答案被否决了?它有效并且涉及最少的供应商代码覆盖。最佳答案恕我直言。
  • @FallenSquirrel 它可以工作,但我认为这不是所需的解决方案,因为 OP 可能希望在 Sonata 中完成解决方案并且不想触及类属性
【解决方案3】:

除了@RobMasters 解决方案:

如果要设置关系,可以从实体管理器(而不是完整对象)获取引用:

public function getNewInstance()
{
    $instance = parent::getNewInstance();

    if ($this->hasRequest()) {
        $branch = $this->getRequest()->get('branch', null);

        if ($branch !== null) {
            $entityManager = $this->getModelManager()->getEntityManager('MyBundle\Entity\Branch');
            $branchReference = $entityManager->getReference('MyBundle\Entity\Branch', $branch);

            $instance->setBranch($branchReference);
        }
    }
    return $instance;
}

我将示例添加到我的博客中: http://blog.webdevilopers.net/populate-resp-set-default-values-on-form-resp-object-or-instance-in-sonataadminbundle/

【讨论】:

  • 标识符在哪里? “11”从何而来?
  • 是的,正是我的问题。
  • 不确定你的意思。在我的示例中只是硬编码,因为我从测试用例中复制了它。只需将 11 替换为来自请求堆栈的 $branch。我认为这很明显。除此之外,我将编辑我的示例。
  • 你的博客对我很有帮助
【解决方案4】:

对于布尔值,另一种选择是在configureFormFields 内部传递给add 方法的第一个数组中设置data

所以经过一些记忆后,我的代码(对于一个我想默认检查的复选框)最终看起来像这样:

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name')
        ->add('visible', null, ['label'=>'Visibility', 'data' => true ])
    ;
}

... 它在我的文件顶部保存了几行,因为我可以摆脱 getNewInstance() 定义。

【讨论】:

  • 从“数据”编辑现有项目值时,将覆盖实体的值。
猜你喜欢
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多