2017-05-02 1 views
1

내가 양식을 구축 EntityType의 추가 옵션을 선택 엔티티 타입의 필드가 포함되어있는 경우 : 사용하여 "기타"를 부르는 선택Symfony3 ConstraintViolation 오류

/** 
* Show account register form. 
* 
* @param FormBuilderInterface $builder Builder to modify 
*/ 
protected function showAccountRegisterForm(FormBuilderInterface $builder) 
{ 
    $builder 
     ->add('bank', 
      EntityType::class, 
      [ 
       'class' => 'AdminBundle:Bank', 
       'choice_label' => 'name', 
       'required' => false, 
       'translation_domain' => 'form', 
       'placeholder' => 'Choose a bank', 
      ] 
     ) 
    ; 
} 

내가 사용자에 대한 또 하나의 옵션을 추가를 finishView 기능 :

public function finishView(FormView $view, FormInterface $form, array $options) 
{ 
    //new option 
    $other = new ChoiceView(array(), 'other', $this->translator->trans('bank.option.other')); 
    //adding the new option 
    $view->children['bank']->vars['choices'][] = $other; 
} 

모든 것이 잘 작동하고 나에게 '다른'옵션을 렌더링하지만이 옵션을 선택하면 '다른'와 그 실체에 양식 오류가 발생했습니다 제출. 누구든지이 문제를 해결하는 방법을 알고 있습니까? 감사합니다

값이 '기타' 문자열이고 우리의 파일이 EntityType이므로 그 이유는 ConstraintViolation 오류입니다. 나는 이것을 며칠 동안 찾고 있었지만 올바른 답을 찾을 수있었습니다. enter image description here

+0

는 "다른 값은 엔터티 검증에 존재하지 않는 도움이 될

희망. 대체합니다 '기타' ''와 양식의 제출시에 컨트롤러를 관리합니다. 엔티티를 type 특별한 경우를 다루기 위해서 만들어진 것이 아니며, finishview 함수에서 null을 허용하거나 manuel 설정을 위해 ChoiceType을 사용한다. – Snoozer

답변

0

엔티티 유형을 사용하고 있으며 존재하지 않는 엔티티를 제출하려고합니다. 엔티티 유형을 사용하려면 데이터베이스에 실제 선택 사항이 기록되어 있어야합니다.

+0

그래서 EntityType을 사용하면 데이터베이스에서 동일한 레코드 값을 가져야한다. , EntityType 대신 사용할 수있는 다른 형식이 있습니까? 감사합니다 –

+0

http://symfony.com/doc/current/reference/forms/types/choice.html 선택 형식 문서를 사용할 수 있습니다. – Filchev

0

좋아요, 마침내 양식 작성기에서 '은행'을 제거하여 폼 유효성 검사를 무효화하고 컨트롤러에서 직접 확인한 다음 템플릿을 통과시키고 템플릿을 선택하고 최종적으로 은행을 요청에서 얻습니다. 대신.

케이스에 시간을 절약 할 수 있도록 추가 필드와 함께 symfony 양식을 사용해야합니다. 여기서 요점은 EntityType과 ChoiceType에 대한 테스트였습니다. 두 가지 모두 양식을 렌더링 할 때 존재하는 데이터가 필요합니다. 보내지 않는 데이터가 양식을 야기 할 경우 ConstraintViolation 오류이 발생합니다. 따라서 전송하는 데이터가 새로운 데이터 (옵션) 인 경우 js를 추가하면 오류가 발생합니다. 이것과 비슷한 또 다른 경우, EntityType을 사용하고 query_builder (ChoiceType 사용과 동일하고 함수에서 선택 사항을 얻는 경우)를 사용하면 j가 가장 많이 추가하는 새 데이터 (옵션)가 작성한 쿼리로 얻을 수 있습니다. 예 : query_builder는 상태가 true 인 은행 만 가져 오지만 방금 상태를 추가 한 새 은행은 false이므로 오류가 발생합니다. 이 :