Symfony:在子表单上设置自定义数据属性,以便在twig模板中使用

时间:2016-07-08 15:40:29

标签: twig symfony-forms symfony

我有以下设置。 - 一天实体 - 具有自己字段的日表单

在日期表单中,我想添加一个基于六日属性的计算“总计”值。我已经成功创建了一个这样做的类。因此,主要问题是:如何将计算数据链接到每个日期表格

我在下面只显示必要的代码,所以如果你错过了什么,它就不会显示。

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;
}  

1 个答案:

答案 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是默认值,侦听两个事件。