在Symfony2表单中分配和更新实体属性


Assign and update entity property in Symfony2 form

无论如何我可以分配一个实体和编辑它的一个属性在一个单一的Symfony2形式?

的例子:

任务有许多活动。

当我创建一个活动时,我通过实体表单字段分配一个任务。我还想在创建实体时更新Task remainingEstimateInSeconds。

活动实体:

<?php
namespace AppBundle'Entity;
/**
 * Activity
 *
 * @ORM'Table()
 * @ORM'Entity(repositoryClass="AppBundle'Entity'ActivityRepository")
 */
class Activity
{
    /**
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @Assert'NotNull()
     * @ORM'ManyToOne(targetEntity="Task")
     */
    private $task;
}

任务实体:

<?php
namespace AppBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * Task
 *
 * @ORM'Table()
 * @ORM'Entity(repositoryClass="AppBundle'Entity'TaskRepository")
 */
class Task
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @Assert'NotBlank()
     * @ORM'Column(name="title", type="string", length=255)
     */
    private $title;
    /**
     * @ORM'Column(name="remainingEstimateInSeconds", type="integer", length=255, nullable=true)
     */
    private $remainingEstimateInSeconds;
}

活动形式:

我目前的实现是使用非映射字段。剩余的估计值被设置回控制器中的任务,这不是最好的实现。

<?php
namespace AppBundle'Form;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolver;
use Symfony'Component'Validator'Constraints'NotNull;
class ActivityType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('description');
        $builder->add('task');
        $builder->add('remainingEstimateInSeconds', 'integer', array(
            'mapped' => false,
            'constraints' => array(
                new NotNull()
            )
        ));
    }
    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => 'AppBundle'Entity'Activity',
            )
        );
    }
    /**
     * @return string
     */
    public function getName()
    {
        return 'activity';
    }
}

我也尝试使用property_path => "task.remainingEstimateInSeconds",但重复的property_path抛出某种错误。

在主表单上使用带有POstrongET_DATA和POstrongUBMIT侦听器的非映射字段来预填充字段/更新对象怎么样?