2012-07-11 2 views
0

안녕하세요. 내 웹 사이트에 두 개의 다른 언어로 모든 페이지를 저장하고 있습니다. 지금 symfony2로 개발중인 관리 영역으로 내 페이지를 관리하고 싶습니다.Symfony2가있는 하나의 컨트롤러에서 두 개의 양식 처리

다음 컨트롤러 코드는 데이터베이스의 올바른 데이터를 포함하는 동일한 페이지에 두 개의 양식을 표시 할 수 있습니다. 한 형태 EN에 대한 DE 언어와 다른 관리하려면 :

보기 :

<form action="{{ path('admin_about') }}" method="post" {{ form_enctype(formEN) }}> 
      {{ form_widget(formEN) }} 

      <button type="submit" class="btn btn btn-warning" naem="EN">Save</button> 
     </form> 

     <form action="{{ path('admin_about') }}" method="post" {{ form_enctype(formDE) }}> 
      {{ form_widget(formDE) }} 

      <button type="submit" class="btn btn btn-warning" name="DE">Save</button> 
     </form> 

컨트롤러 : 공공 기능 aboutAction (요청 $ 요청) {

$pageEN = $this->getDoctrine() 
    ->getRepository('MySitePublicBundle:Page') 
    ->findOneBy(array('idName' => 'about', 'lang' => 'EN')); 

    $pageDE = $this->getDoctrine() 
    ->getRepository('MySitePublicBundle:Page') 
    ->findOneBy(array('idName' => 'about', 'lang' => 'DE')); 

    if (!$pageDE) { 
     throw $this->createNotFoundException('About page (DE) not found.'); 
    } 

    if (!$pageEN) { 
     throw $this->createNotFoundException('About page (EN) not found.'); 
    } 

    $formDE = $this->createFormBuilder($pageDE) 
     ->add('title', 'text') 
     ->add('content', 'text') 
     ->getForm(); 

    $formEN = $this->createFormBuilder($pageEN) 
     ->add('title', 'text') 
     ->add('content', 'text') 
     ->getForm(); 

    //Save Form here 

    return $this->render('MySitePublicBundle:Admin:about.html.twig', array(
     'aboutPageDE' => $pageDE, 'aboutPageEN' => $pageEN, 'formDE' => $formDE->createView(), 'formEN' => $formEN->createView(), 
    )); 
} 

내 질문은 : 하나의 컨트롤러에서 사용 된 양식을 저장하는 방법은 무엇입니까? 컨트롤러에서

+1

[양식 클래스] (http://symfony.com/doc/current/book/forms.html#creating-form-classes)에서 번역을 처리 할 수 ​​있습니다. 그렇게하면 영속성에 대해 걱정할 하나의 형식 만있을 수 있습니다. 각 번역에 대해 FormBuilder 코드를 복제 할 필요가 없습니다. – Nick

+0

이것이 내 문제를 어떻게 해결하는지 보지 못합니까? 아니면 그냥 술을위한 것입니까? 자신을 반복하지 마십시오 :-) – Sven

+0

오, 당신은 그들을 일반적으로 저장하는 방법을 찾고 있습니까? 나는 대답을 추가 할 것이다 ... – Nick

답변

1

요청과 같은 형태를 포함하는 경우 테스트 수 :

if($this->getRequest()->get('form1')) { 
    // 
} elseif($this->getRequest()->get('form2')) { 
    // 
} 
Symfony2 문서의 Forms and Doctrine 섹션에 기반
+0

이 코드에 대해 'form1'과 'form2'의 폼의 DOM-Id를 설정했다. 그것을 찾을 수 없습니다 :-( – Sven

+0

여기서 중요한 ID가 아니라 폼 이름입니다. 폼 유형의 getName() 메서드를 재정 의하여 컨트롤러에서 테스트중인 것과 동일한 값을 반환 할 수 있습니다. – Pappa

+0

DOM 매개 변수 'name'도 작동하지 않습니다. 양식 유형을 덮어 쓰는 방법은 무엇입니까? 왜 그런 짓을할까요? 그 초보자 quesions 묻는 미안 해요. 내가 가장 쉬운 솔루션을 목표로하고 그것을 리팩토링 .. – Sven

2

(또는 귀하의 경우, 당신이있어 이후 not using a Form class) - -

그래서 당신은 당신이 TitleContent (과 가진 정상의 getter/setter를) 저장 MySitePublicBundle:Page을 설정 한 가정 //save form here이 곳.

if ($request->getMethod() == 'POST') { 
    $form->bindRequest($request); 

    // data is an array with "title" and "content" keys 
    $data = $form->getData(); 

    // You'll need to have some switch depending on which language you're dealing 
    // with... (unless its both, then just repeat for $pageDE) 

    $pageEn->setTitle($data['title']); 
    $pageEn->setContent($data['content']); 

    $em = $this->getDoctrine()->getEntityManager(); 
    $em->persist($pageEn); 
    $em->flush(); 
} 
+1

알겠습니다. 그것을 저장하십시오. 그러나 나는 스위치로 고투하고있다. 지금까지 고마워. – Sven

+0

그건 그렇고 엔티티 클래스를 사용하고 있습니다! – Sven

+0

각 양식의 언어를 알려주는 숨겨진 필드를 추가 한 다음'if ($ data [ 'language'] == "EN") {$ pageEN -> ...} else {$ pageDE-> ..}'당신의 스위치로? – Nick

관련 문제