情况
我有一个控制器,例如处理页面编辑。
/**
* 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()
));
}
我的表单包括两个提交按钮,一个用于保存Page并返回到索引,一个用于保存Page并保留在编辑表单中。
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应用程序,并难以理解何时应该使用它们。
我认为您不需要服务。您可以这样重写中间部分:
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()
));
因此,您将检查是否单击了“保存并转到索引”按钮-如果是,则重定向到该位置。否则,只需使用插入的值再次呈现该表单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句