【问题标题】:How to create a unique form using multiple entities fields in symfony2如何使用 symfony2 中的多个实体字段创建唯一表单
【发布时间】:2012-09-25 10:18:37
【问题描述】:

我想使用来自多个实体的某些字段创建一个表单。我已经创建了所有需要的不同实体,并且我没有使用表单类。我需要知道如何呈现表单并处理其数据,以便将它们保存到数据库中的正确表中。

这是我负责执行此操作的控制器的一部分

public function createPublicSpaceAction() {
    //My entities
    $Room = new Room();
    $GuestList = new GuestList();
    $Guest = new Guest();

    //I need to know what to do from here

    return $this -> render('AcmeUserBundle:Default:Forms/createPublicSpace.html.twig', array());
}

我一直在努力寻找解决方案,并想出了一个表单需要一个实体的想法。因此,也许解决方案是将这些实体合并为一个,以便我可以轻松构建表单。然后我必须将数据持久化到相应的表中。但我想不出如何合并实体。

【问题讨论】:

    标签: symfony doctrine


    【解决方案1】:

    我想出了一个临时解决方案。对于那些想知道的人,我手动创建了一个实体,它看起来像是我需要的所有实体的合并。这个新实体与 Doctrine 没有链接,因此它无法创建表。它的目标只是让我建立一个表单并能够通过该表单操作数据。然后我将所有提交的数据分配给相应的实体字段并将它们持久化到数据库中。

    我再次知道这不是最好的解决方案。但由于某些原因,我不会说,这是为我而设的。我希望这可以帮助一些与我处于相同情况的人,并且不要犹豫发布可以帮助或更好的方法的链接。

    【讨论】:

      【解决方案2】:

      强烈推荐使用表单类http://symfony.com/doc/current/book/forms.html#creating-form-classes

      它们旨在节省时间并使很多事情变得更容易。

      但是,要回答您的问题,请考虑以下事项。您的操作需要处理发布请求。所以用 post 数据捕获请求对象:

      use Symfony\Component\HttpFoundation\Request;
      
      public function createPublicSpaceAction(Request $request)
      

      然后获取表单构建器实例并创建表单:

      $builder = $this->createFormBuilder();
      
      $builder->add('floor', 'text', array(
              'label' => 'Room floor',
              'data' => $room->getFloor()
      ));
      

      根据需要添加尽可能多的表单字段。有几种内置的字段类型:http://symfony.com/doc/current/book/forms.html#built-in-field-types

      创建表单:

      $form = $builder->getForm();
      

      将表单传递给您的模板:

      return $this -> render('AcmeUserBundle:Default:Forms/
                              createPublicSpace.html.twig', array(
          'roomForm' = $form
      ));
      

      要在您的操作中获取发布的数据:

      if ('POST' == $request->getMethod()) {
          $data = $request->request->get("form");
      }
      

      在您的模板中,您可以自己渲染表单或让 twig 完成工作:

      {{ form_widget(form.floor)}}
      

      所以这是要提到的最重要的事情。但是你应该通过http://symfony.com/doc/current/book/forms.html他们实际上告诉你我写下的一切。

      祝你好运;)

      【讨论】:

      • 非常感谢您的帮助,但我仍然不知道如何构建一个表单,其中包含取自不同实体但没有共同点的字段。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多