2017-01-11 4 views
2

데이터 세트를 필터링하기 위해 Symfony 양식을 사용합니다. 로그 레코드 테이블을 필터링하는 '사용자'드롭 다운이 있습니다 (각 레코드는 사용자와 연결될 수 있지만 링크되지 않을 수 있음). 모든 사용자 (이 필드에 의해 필터링을 비활성화) 및 기록 필드를 가지고 필터링해야한다 "아니오 사용자"즉 폼 엔티티 : 추가 옵션 추가

, LogRecord <- many-to-one nullable -> User

잡기는 내가 2 드롭 다운 목록에서 옵션을 지원하려는 것입니다 = NULL. 그러나 폼 유효성 검사 프로세스를 위반하지 않고 해당 사례를 구별 할 수있는 양식을 배우는 방법을 모릅니다. 어떤 아이디어?

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->setMethod('GET'); 

    $builder 
     ->add('user', EntityType::class, array(
      'class' => 'AppBundle:User', 
      'choice_label' => 'name', 
      'placeholder' => 'All', 
      'query_builder' => function (UserRepository $repo) { 
       return $repo->findForOptionsQueryBuilder(); 
      }, 
      'label' => 'User', 
      'required' => false, 
     )); 
} 

현재 드롭 :

  • 모든
  • 사용자 1
  • 사용자 2

원하는 드롭 다운 :

  • 모든
  • 없음 (null)와
  • 사용자 대신 ChoiceType를 사용하는 2
+0

도움이 될지 모르겠지만 allow_extrafields를 시도하십시오. – Aerendir

답변

1

하나 개의 아이디어가 될 수 1

  • 사용자. 이런 식으로 뭔가 :

    <select id="form_user" name="form[user]"> 
        <option value="">All</option> 
        <option value="0">None</option> 
        <option value="1">User A</option> 
        <option value="2">User B</option> 
        <option value="3">User C</option> 
    </select> 
    

    에 이벤트 동작을 제출 :

    // all your users 
    $choices = $repo->findForOptionsQueryBuilder()->getQuery()->getResult(); 
    
    // add None option 
    $choices = array_merge(['None' => 0], $choices); 
    
    $builder->add('user', ChoiceType::class, [ 
        'choices' => $choices, 
        'placeholder' => 'All', // add All option to beginning 
        'required' => false, 
        'choice_label' => function ($value, $key) { 
         return $value ?: $key; 
        }, 
    ]); 
    

    이 렌더링해야하는이 HTML 입력을 다음과

    • 옵션이 "모든"을 선택하면 다음 $form->get('user')->getData()null 같다
    • "없음"을 선택한 경우 $form->get('user')->getData()은과 같습니다. 옵션 "사용자 A"를 선택하면
    • $form->get('user')->getData() 따라서 양식 유효성 검사 프로세스를 파괴하지 않고 이러한 경우를 구별 할 수 User

    의 인스턴스입니다.

  • +0

    네, 전달 된 값이 null이면 사전 제출 이벤트 핸들러에서 ChoiceType으로 EntityType 양식 요소를 대체했습니다. –