场合
我有一个处理页面编辑的控制器。
/**
* Update a page
* @ParamConverter("page", class="AcmeBundle:Page", options={"id" = "page_id"})
*/
public function editAction(Page $page, Request $request)
{
$form = $this->createForm(PageType::class, $page);
if ($form->handleRequest($request)->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', 'page_admin.flash.updated');
if ($form->get('save_and_stay')->isClicked()) {
return $this->redirect($request->headers->get('referer'));
}
else {
return $this->redirectToRoute('acme_page_admin_index');
}
}
return $this->render('AcmeBundle:PageAdmin:edit.html.twig', array(
'form' => $form->createView()
));
}
我的表单包括两个提交按钮,一个用于保存页面并返回索引,一个用于保存页面并保留在编辑表单中。
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('headline')
->add('body')
->add('save', SubmitType::class)
->add('save_and_stay', SubmitType::class)
;
}
问题
提交表单后,我只需检查单击了哪个按钮并执行正确的操作。但我想我需要为此服务而且我不确切知道如何做。如何命名(acme.form.save_and_stay
?),在哪里存储它(AcmeBundle\Service\SaveAndStay
?)。
我在使用这些服务组织我的Symfony应用程序时遇到了一些困难,并了解何时应该使用它们。
答案 0 :(得分:1)
我认为你不需要服务。你可以像这样重写中间部分:
if ($form->handleRequest($request)->isSubmitted() && $form->isValid()) {
[...]
if ($form->get('save')->isClicked()) {
return $this->redirectToRoute('acme_page_admin_index');
}
}
return $this->render('AcmeBundle:PageAdmin:edit.html.twig', array(
'form' => $form->createView()
));
因此,您将检查是否单击了保存并转到索引的按钮 - 如果是,则重定向到那里。否则只需使用插入的值再次渲染表单。