2016-06-09 1 views
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 응용 프로그램을 서비스로 구성하고 언제 사용할지 이해하기가 어렵다.

답변

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() 
    )); 

그래서 당신은 확인할 것입니다 여부를 이동 저장 앤 - 투 - 인덱스 것은 클릭 한에 해당하는 버튼 - 예, 다음이로 리디렉션합니다. 그렇지 않으면 삽입 된 값을 사용하여 양식을 다시 렌더링하십시오.

+0

사용자가 F5를 사용하여 양식을 다시 보낼 수 있다고 생각했지만 Symfony가이를 방지하기에 충분히 똑똑합니다. 그래서이 경우 어떤 서비스도 필요하지 않습니다. 그러나 컨트롤러에 20 줄 미만의 코드가 포함되어야한다고 읽었습니다. 이 작은 형태로 12 줄의 코드가 있습니다. 확인과 같은 물건을 더 만들어야한다면 어떨까요? – AlexisWbr

+0

확인 및 확인을 위해 http://symfony.com/doc/current/book/validation.html –

+0

에서 읽으십시오. 20 줄 미만의 컨트롤러에 대한 "엄격한 규칙"은 다소 극단적이라고 생각합니다. 컨트롤러는 오히려 "얇은"것이어야하지만 독단적으로 20 라인 만이 유용한 규칙이라고 생각하지 않습니다. 서비스에 대한 자세한 내용은 http://symfony.com/doc/current/book/service_container.html을 확인하십시오. 실제로 이해하는 데 약간의 시간이 걸리지 만 몇 번만 사용하면됩니다. 그것의 걸림 새를 얻는 시작하십시오. –