2016-10-31 2 views
0

심포니에서 두 개의 항목 ("이벤트"및 "정보")을 포함하는 양식을 업데이트하는 데 문제가 있습니다. 사용자가 정보를 업데이트하려고 시도 할 때까지 모든 것이 올바르게 작동합니다 . 그들이 할 때 모든 새 데이터베이스 항목으로 저장합니다.Symfony 3.1 : 업데이트하는 대신 양식을 편집하여 새로운 데이터베이스 항목을 만듭니다

public function editAction(Request $request, Event $event) 
{ 
    $user = $this->getUser(); 

    $editForm = $this->createFormBuilder() 
     ->setMethod('PUT');  

    $editForm->add("event", 'AppBundle\Form\EventType'); 
    $editForm->add("info", 'AppBundle\Form\InfoType'); 

    $editForm = $editForm->getForm(); 
    $editForm->handleRequest($request); 

    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $formEvent = $editForm->get('event')->getData(); 

     echo "Debug<br />"; 
     echo "form id: ". $formEvent->getId(); // Wrong. Returns null. 
     echo "<br /> event id: ". $event->getId(); // The correct id of entity that should be updated. 

     $em->merge($formEvent); 
     $em->flush();  
    } else { 
     $editForm->get('event')->setData($event); 
    } 

    return $this->render('event/edit.html.twig', array(
     'event' => $event, 
     'edit_form' => $editForm->createView() 
    )); 

을 $ editForm->의 get ('이벤트'에서 발견 좀 디버그 정보를 에코하고, handleRequest()는 이벤트 개체에 새 정보를지도 할) 이드의 ID가 누락되었다는 것을 제외하고는 업데이트하는 대신 새 엔티티의 생성과 관련이 있다고 가정합니다. 어떤 일입니까?

라우팅 : event_edit: path: /{id}/edit defaults: { _controller: "AppBundle:Event:edit" } methods: [GET, POST, PUT]

나뭇 가지 : 이벤트 개체는 그것이 교리에 의해 관리 업데이 트하려는 엔티티가

{{ form_start(edit_form, {'attr': {'novalidate': 'novalidate'}}) }} 
    {{ form_errors(edit_form) }} 
    {{ form_widget(edit_form.event.title) }} 
    {{ form_widget(edit_form.info) }} 
    <input type="submit" value="Save" /> 
{{ form_end(edit_form) }} 
+0

우리에게 라우팅 구성과 템플릿을 보여주십시오 - 컨트롤러가 입력 데이터를받는 방법을 알아야합니다.) –

+0

안녕하세요 미하이! 게시물을 수정했습니다. – user2017748

답변

1

경우 (로드)는, 당신은 당신의 형태로 이벤트 개체를 전달해야합니다. 이것을 시도하십시오 :

public function editAction(Request $request, Event $event) 
{ 
    $user = $this->getUser(); 

    $editForm = $this->createFormBuilder($event) 
     ->setMethod('PUT');  

    $editForm->add("event", 'AppBundle\Form\EventType'); 
    $editForm->add("info", 'AppBundle\Form\InfoType'); 

    $editForm = $editForm->getForm(); 
    $editForm->handleRequest($request); 

    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($event); 
     $em->flush();  
    } 

    return $this->render('event/edit.html.twig', array(
     'event' => $event, 
     'edit_form' => $editForm->createView() 
    )); 
} 
+0

작동하지 않는 것 같습니다. $ 이벤트는 퍼미션 포인트에서 원래 데이터 만 포함하고 요청에 게시 된 새 데이터는 포함하지 않습니다. – user2017748

관련 문제