在 symfony2 sonata 管理包中设置默认值
Posted
技术标签:
【中文标题】在 symfony2 sonata 管理包中设置默认值【英文标题】:setting default value in symfony2 sonata admin bundle 【发布时间】: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 是什么? 【参考方案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() 定义。
【讨论】:
从“数据”编辑现有项目值时,将覆盖实体的值。以上是关于在 symfony2 sonata 管理包中设置默认值的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 2 Sonata 媒体包:在没有奏鸣曲管理员的情况下保存媒体文件图像
Symfony 2.8 Twig_Error_Runtime Sonata 管理包
Symfony2、Sonata、UserBundle:当用户启用更新时发送电子邮件