2017-02-21 5 views
0

내가 정기적 그래서 같은 몇 가지 필수가 아닌, 널 (NULL) 요소와 formType이 널 지속 새로운 기록, 그것은 작동합니다 - 그것은 NULL입니다. 그러나 폼을 정의하고 나중에 폼을 업데이트하여 제거하려고하면 업데이트되지 않고 계속 유지됩니다.심포니 엔티티는

$data = $editForm->all(); 
print_r($data['mytime']->getData()); 

을 그리고 실제로 비어 다음 isValid() 블록에서

나는 확인. 엔티티와 동일 :

$entity->getMyTime() 

이 비어 있습니다. 하지만 언제 나

$em->persist($entity); 
$em->flush(); 

mytime은 여전히 ​​이전 값을 가지고 있습니다.

무엇이 누락 되었습니까?

[편집]의 요청에 따라, 전체 컨트롤러 코드 :

if(is_null($entity->getMyTime()) || empty($entity->getMyTime())) 
    $entity->SetMyTime((new \DateTime())->setTime(00, 00)); 
: 내가 답변에서 얻은 아이디어를 몇 가지 테스트 후, 나는 isValid() 섹션에서이 시도 [EDIT2]

public function myFunctionAction(Request $request ,$id, $to) { 
    $em = $this->getDoctrine()->getManager(); 
    $entity = $em->getRepository(Day::class)->find($id); 

    $editForm = $this->createForm(new DayType(), $entity); 
    $editForm->add('submit', 'submit', array('label' => 'Update')); 

    $editForm->handleRequest($request); 
    if ($editForm->isSubmitted() && $editForm->isValid()) { 
     $em->persist($entity); 
     $em->flush(); 
    } 

    return array(
     'entity'  => $entity, 
     'to'   => $to, 
     'edit_form' => $editForm->createView(), 
    ); 
} 

그래서 시간을 00으로 설정하면 잠재적으로 사용할 수 있습니다 ... 그러나 : - 다시로드 된 페이지에는 이전 값이 표시됩니다. $editFormisValid() 확인 전에 (분명히) 업데이트되지 않았으므로 정상적인 것 같습니다. - 00:00를 DB에 저장하는 것이 NULL보다 적합하지 않기 때문에 Itls는 이상적이지 않습니다. 내가 그 오른쪽 코드라고 생각

... 
$editForm->get('mytime')->setData(new \DateTime()); 
... 
if ($editForm->isSubmitted() && $editForm->isValid()) { 
    $em->persist($entity); 
    $em->flush(); 
} 

:

+0

엔티티를 만들 때 전체 코드를 표시하고 유지하고 플러시 할 때까지 시간을 설정할 수 있습니까? –

+0

@AlvinBunk가 컨트롤러 코드로 편집 되었습니까? –

+0

엔티티에 setMytime()이라는 setter 메소드가 있는데, M은 대문자로되어 있습니까? 양식 필드가 엔티티에 매핑되지 않은 것 같습니다. 개발 환경의 양식 섹션에있는 Symfony 프로파일 러를 참조하십시오. – ste

답변

1
if ($editForm->isSubmitted() && $editForm->isValid()) { 
    if(is_null($entity->getmytime()) || empty($entity->getmytime())) { 
     $entity->setMytime(null); 
    } 
    $em->persist($entity); 
    $em->flush(); 
} 

위의 코드가 작동한다고 생각합니다. 시도 해봐. 희망이 작동합니다.

감사합니다. & 감사합니다.

+1

if (null 엔티티 -> getmytime()) || empty ($ entity-> getmytime())) { var_dump ($ entity); exit; $ entity-> setMytime (null); } 위의 내용을 확인하고 게시 할 수 있습니까? –

+1

저는 mytime에 무엇이 들어 있는지, 그리고 블록이 실행되고 있는지를보고 싶습니다. –

+0

그것은 효과가있다, 나는 사소한 것들을 조정해야하지만 결국 그것은 좋다! 블록이 실행되었습니다. 단순히 폼이 뷰에서 업데이트되지 않았고, JS가 잘못되었습니다 ... Cound를 사용하면 해당 엔티티가 'null'인지 검색 한 후이를 'null'로 설정하는 이유를 설명 할 수 있습니다. –

1

당신은 (두 번째 편집)이 시도 할 수 있습니다. 현재 게시 된 코드에서 양식 또는 엔터티를 사용하지 않으므로 아무 것도 변경되지 않았습니다. 폼이나 엔티티를 사용하여 무언가를 수행 한 다음 데이터베이스에서 아무 것도 볼 수 없도록 유지하고 플러시해야합니다.

위의 코드가 작동하지 않을 수도 있지만 시도해보십시오. 잘하면 아이디어를 얻을 수 있습니다.

+0

오류 500 - 제출 된 양식의 데이터를 변경할 수 없습니다! –

+0

엔티티 – zenith

+0

@mdma가 아닌 양식 필드에 데이터를 설정하면 코드가 정확합니다. 제출 요청 전에 설정해야한다는 오류가있었습니다. 같은 예제를 [Symfony의 문서에서 폼 클래스 만들기] (https://symfony.com/doc/current/forms.html#creating-form-classes)에서 설정하십시오. 코드가 작동해야하기 때문에 -1을 가질 가치가 없습니다. –