2012-08-17 2 views
0

Symfony가 왜 이것을 수행하는지 이해할 수 없습니다.템플릿에 없지만 formType에있는 경우 Symfony가 양식 필드를 null로 설정하는 이유

는 심포니가 DateCreated 데이터베이스 값을 덮어 null에 설정 내가 내 템플릿에 dateCreated을 표시하지 않습니다 이제 UserFormType 클래스

->add(username); 
->add(datecreated); 

있다고 가정합시다. 그래서 당신은 모든 필드 그렇지 않으면 설정됩니다 렌더링합니다 Additionally, if there are any fields on the form that aren't included in the submitted data, those fields will be explicitly set to null. :

는 그 값을 설정하지에 문제가 널 (null)과하지 documentation에서 템플릿

답변

1

의 경우 단지 원래의 값이 무엇을 알고 싶어 null로.

폼에 추가 할 수 없으며 Symfony는 업데이트시 해당 값을 그대로 둡니다. 어쨌든 코드에서 dateCreated를 설정 했으므로 Forms 라이브러리에서 해당 필드를 업데이트 할 필요가 없습니다.

다른 옵션은 숨겨진 필드로 필드를 추가하는 것입니다. ->add('dateCreated', 'hidden') 템플릿의 필드를 렌더링해야하며 Symfony는 dateCreated 데이터를 유지합니다. 각 행을 렌더링하는 경우 나뭇 가지에 form_rest(form)을 사용하면 누락 된 모든 필드를 렌더링 할 수 있습니다.

0

이 항목은 오래된 항목이지만 동일한 상황이 발생했습니다. 가장 쉬운 방법은이 항목을 처리하기 위해 양식에서 필드를 제거하는 것이 었습니다.

예를 들어 사용자가 연결된 그룹의 목록을 표시하려고하지만 다른 사용자는 그룹을 볼 수 없습니다. 그 결과 사용자가 이미 변경 한 그룹이 제거됩니다.

솔루션 :

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->addEventListener(
     FormEvents::PRE_SUBMIT, 
     function (FormEvent $event) { 
      $this->onPreSubmit($event); 
     } 
    ); 

    ..... 
} 

public function onPreSubmit(FormEvent $event) 
{ 
    $params = $event->getData(); 

    if (!isset($params['groups'])) { 
     $event->getForm()->remove('groups'); 
    } 
} 

지금 양식하면 양식에 옵션 'allow_extra_fields' => true를 추가 할 수 있습니다 피하기 위해이 설정되어있는 경우 그룹을 거부합니다. 유효성 검사를 통과하고 아무 것도하지 않습니다.

나는 굉장한 팬은 아니지만 다른 솔루션을 볼 수 없거나 양식 시스템에 내장 된 심포니없이 유효성 검사를 처리하기 위해 html 및 액션/서비스를 만들어야합니다.

관련 문제