我有以下设置。 - 一天实体 - 具有自己字段的日表单
在日期表单中,我想添加一个基于六日属性的计算“总计”值。我已经成功创建了一个这样做的类。因此,主要问题是:如何将计算数据链接到每个日期表格。
我在下面只显示必要的代码,所以如果你错过了什么,它就不会显示。
DayEntity是默认的,带有一堆字段。
DayType表单:
+
在Twig我喜欢做类似的事情:
class DayType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('field');
// etc, bunch of fields
// Here I want to add a calculated field. How to do it?
// The result is retrieved from my service, with a function: calculateTotal($day);
}
}
I have already a service which does the necessary computation:
public function calculateTotal(Day $day)
{
// Some magic here ;-)
return $returnDateInterval;
}
答案 0 :(得分:0)
我已经找到了答案......伟大的Symfony文档! Defining your forms as services
所以我做的是修改我的service.yml:
app.subscriber.calculatetotal:
class: AppBundle\Form\EventListener\CalculateTotalFieldSubscriber
arguments: ["@app.manager.day"]
app.form.day:
class: AppBundle\Form\Type\DayType
arguments: ["@app.subscriber.calculatetotal"]
tags:
- { name: form.type }
如您所见,我还添加了一个Form EventListener,它侦听PRE_SUBMIT和POST_SET_DATA以更改我的非映射“total”字段。
在DayType.php表单中:
private $calculateTotalFieldSubscriber;
public function __construct(CalculateTotalFieldSubscriber $calculateTotalFieldSubscriber)
{
$this->calculateTotalFieldSubscriber = $calculateTotalFieldSubscriber;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
// I do not save this field to the database, so mapped is set to false
->add('total', TimeType::class, array(
'mapped' => false
))
$builder->addEventSubscriber($this->calculateTotalFieldSubscriber);
}
calculateTotalFieldSubscriber是默认值,侦听两个事件。