我正在制作一个相当大的symfony3应用程序。这是我的第一个,我必须说我对框架的稳健性感到非常惊讶。这是一个允许用户创建“事件”的应用程序。每个事件都发生在某个“位置”。我有两个捆绑“EventBundle”和“VenueBundle”。场地可以举办许多活动,因此两者之间存在一对多的关系。此时,我有一个带有下拉输入的事件创建页面,该页面自动填充数据库中已有的场所。 EntityType字段使我可以轻松实现该关系。这是一个很棒的symfony功能。
因为在创建新活动时,并非每个场所都已存在于数据库中,我想在事件创建向导中使用一个小的“快速创建场所”模式窗口(基于zurb-foundation)。这是为了防止用户退出向导以添加新的场地。
在过去的两三天左右,我在一个树枝页面上有两个来自不同实体的表格。我已经在这个问题中找到了答案:Symfony - Two forms from two entities on the same page。但答案为我提出了第二个问题。我认为如果我首先展示我现在拥有的代码,我会更容易解释:
public function createAction(Request $request)
{
$event = new Event();
$eventForm = $this->createForm(EventType::class, $event);
$venue = new Venue();
$venueQuickForm = $this->createForm(VenueQuickType::class, $venue, array(
'action' => $this->generateUrl('massiv_venue_quickcreate')
));
$eventForm->handleRequest($request);
if($eventForm->isSubmitted() && $eventForm->isValid()) {
$event = $eventForm->getData();
$event->setPostedBy(1);
$event->setUpdatedBy(1);
$em = $this->getDoctrine()->getManager();
$em->persist($event);
$em->flush();
return $this->redirectToRoute('massiv_event_homepage');
}
$venueQuickForm->handleRequest($request);
if($venueQuickForm->isSubmitted() && $venueQuickForm->isValid()) {
$venue = $venueQuickForm->getData();
$venue->setPostedBy(1);
$venue->setUpdatedBy(1);
$em = $this->getDoctrine()->getManager();
$em->persist($venue);
$em->flush();
}
在第二种形式的createForm方法(venueQuickForm)中,我添加了一个选项“action”,其中一个url指向场地控制器的quickcreate动作。这是我的想法,在找到答案之前我已经在我的代码中使用了这个,但保留了这一行以了解它的行为方式。事实证明它被忽略了,因为在那个quickCreateAction方法中我简单地设置了一个“ok”响应,当按下提交按钮时,该页面不显示。其余的代码工作正常,场地保存在数据库中。
所以我即将删除该行,但上面的代码确实是要走的路吗?直觉上我想保持两个代码分开,所以将“保存地点”部分放在Venue控制器中似乎对我来说是位置或者这不是Symfony的工作方式吗?