1
我有一个控制器,该控制器处理例如页面编辑。
/**
* 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应用程序的服务,并了解当我应该使用它们。
我以为用户将能够重新发送与F5的形式,但Symfony足够聪明,以防止它,太棒了! 所以我真的不需要任何服务在这种情况下。但我读过一个控制器应该包含少于20行的代码。就这个小表格,我有12行代码。如果我需要更多的东西,比如验证和东西,会怎样? – AlexisWbr
对于检查和验证,请阅读http://symfony.com/doc/current/book/validation.html –
控制器少于20行的“硬规则”,我觉得有点极端。控制者应该相当“瘦”,但我不认为教条只有20行是一个有用的规则。 要了解有关服务的更多信息,请查看http://symfony.com/doc/current/book/service_container.html - 需要一些时间才能真正理解,但只需使用它几次,我想你会开始掌握它。 –