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 - 需要一些時間才能真正理解,但只需使用它幾次,我想你會開始掌握它。 –