Symfony 2.3.6 嵌套表单

Symfony 2.3.6 nested forms

本文关键字:嵌套 表单 Symfony      更新时间:2023-09-26

我正在尝试制作一个包含表单集合的表格,该表格将允许我填写每周数据。我有一个本周的实体,其中包含一些统计数据

/**
 * @ORM'Column(type="integer", nullable=false)
 * @ORM'Id
 * @ORM'GeneratedValue(strategy="IDENTITY")
 */
protected $week_id;
/**
 * @ORM'Column(type="string")
 */
protected $area_worked;
/**
 * @ORM'OneToMany(targetEntity="User")
 */
protected $approved_by;
/**
 * @ORM'OneToMany(targetEntity="DailyStats")
 */
protected $daily_stats;

然后我有每日统计实体:

/**
 * @ORM'Column(type="integer", nullable=false)
 * @ORM'Id
 * @ORM'GeneratedValue(strategy="IDENTITY")
 */
protected $day_id;
/**
 * @ORM'ManyToOne(targetEntity="WeeklyStats")
 */
protected $weekly_stat_id;
/**
 * @ORM'Column(type="float")
 */
protected $hours_worked;
/**
 * @ORM'Column(type="integer")
 */
protected $day_of_week;

然后,对于这两个,我想要一个可以输出到显示整个星期的表格中的表单:

         Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
Hours  |        |         |           |          |        |          |

但是,当我将其放入表单中时:

//weekly stats form
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('dailyReports', 'collection',array(
            'type'=>new DailyStatsForm(),
            'options'  => array(
                'required'  => false
            ),
            'allow_add' => true,
        ));
}

这将生成一个具有空字段集的表单。我可以使用 javascript 向其添加一个字段,但我想知道是否可以始终为此表单生成 7 天以及每周统计信息的其他字段?

任何解决方案建议将不胜感激。

是的,你可以,看看文档,如果你在你的周实体中添加了七个 DailyStats 实体,那么 symfony2 将渲染你想要的七个输入,请检查 http://symfony.com/doc/current/cookbook/form/form_collections.html

class TaskController extends Controller
{   
      public function newAction(Request $request)
      {
           $task = new Task();
           // dummy code - this is here just so that the Task has some tags
           // otherwise, this isn't an interesting example
           $tag1 = new Tag();
           $tag1->name = 'tag1';
           $task->getTags()->add($tag1); // any new related entity you add represents a new embeded form
           $tag2 = new Tag();
           $tag2->name = 'tag2';
           $task->getTags()->add($tag2);
           // end dummy code
           $form = $this->createForm(new TaskType(), $task);
           $form->handleRequest($request);
           if ($form->isValid()) {
               // ... maybe do some form processing, like saving the Task and Tag objects
           }
           return $this->render('AcmeTaskBundle:Task:new.html.twig', array(
               'form' => $form->createView(),
           ));
     }
}