Symfony 奏鸣曲使 formmapper 项目可在逻辑条件下编辑
Symfony sonata make make formmapper item editable with logical condition
我在使用 symfony 时遇到了一个非常小的问题,但我现在根本不知道如何开始。我现在在编码时不断变化,从未完成实际的事情。
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('id')
->add('schedule');
}
现在,日程表是日期时间类型。一个 cronjob,以便在日程安排与当前白天匹配时执行代码。
管理员只需要能够在未来发生时更改计划日期时间,因此 read_only 应该在发生在过去时设置为真。
小问题,但我不知道最好的方法是什么?我可以想到多种解决方案:
- 我是否应该使用 twig 创建一个自定义模板来覆盖默认的编辑和构建逻辑?
- 应该在 configureListField 中创建链接到自定义模板的自定义操作吗?
- 我应该创建一个自定义控制器让控制器决定吗?如果是这样,我可以在管理员中保持我的 configureListField 和 configureShowField 完整,还是应该通过这个控制器完成列表和创建?
谢谢!
我终于解决了
我还尝试了获取您添加到表单映射器的内容的值。
//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'));
我在使用 symfony 时遇到了一个非常小的问题,但我现在根本不知道如何开始。我现在在编码时不断变化,从未完成实际的事情。
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('id')
->add('schedule');
}
现在,日程表是日期时间类型。一个 cronjob,以便在日程安排与当前白天匹配时执行代码。
管理员只需要能够在未来发生时更改计划日期时间,因此 read_only 应该在发生在过去时设置为真。
小问题,但我不知道最好的方法是什么?我可以想到多种解决方案:
- 我是否应该使用 twig 创建一个自定义模板来覆盖默认的编辑和构建逻辑?
- 应该在 configureListField 中创建链接到自定义模板的自定义操作吗?
- 我应该创建一个自定义控制器让控制器决定吗?如果是这样,我可以在管理员中保持我的 configureListField 和 configureShowField 完整,还是应该通过这个控制器完成列表和创建?
谢谢!
我终于解决了
我还尝试了获取您添加到表单映射器的内容的值。
//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'));