簡體   English   中英

以Symfony2形式分​​配和更新實體屬性

[英]Assign and update entity property in Symfony2 form

無論如何,我可以用一個Symfony2形式分​​配一個實體並編輯其屬性之一嗎?

例:

任務有很多活動。

創建活動時,我通過實體表單字段分配任務。 我也想在創建實體時更新任務剩余的EstimateInSeconds。

活動實體:

<?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 property_path => "task.remainingEstimateInSeconds"某種錯誤。

在主表單上使用帶有POST_SET_DATA和POST_SUBMIT偵聽器的非映射字段來預填充字段/更新對象該怎么辦?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM