Symfony2에서 동적 양식을 구현하려고합니다. 양식은 간단합니다. 먼저 사용자가 브로커를 선택한 다음 해당 브로커에 따라 계정을 선택합니다. 따라서 브로커를 선택할 때까지 계정이 비활성화됩니다.
텍스트 입력의 경우 read_only => true
솔루션이 될 수 있지만 select에는 읽기 전용 속성이 없습니다. 그래서 나는 선택을 비활성화하고 jQuery로 선택을 활성화하려고했습니다.
$('#form select').prop('disabled', false);
문제는 서버 측에서 Symfony가 비활성화 된 양식 필드를 처리 할 수 없다는 것입니다. 값은 단순히 null로 설정됩니다.
가능한 해결책을 생각했습니다. 우선, 폼 필드 값이 실제로 요청 매개 변수에 있는지 테스트했기 때문에 컨트롤러에서 필드 값을 수동으로 설정할 수 있었기 때문에 Symfony는이를 처리하고 객체에 매핑하기 만하면됩니다. 나는 그것이 작동 할 것이라고 생각하지만 그것은 정말로 좋은 해결책이 아닙니다.
둘째, 일부 클라이언트 측 해킹으로 선택을 비활성화하거나 양식에 숨겨진 입력을 추가하고 Javascript로 수동으로 값을 설정할 수 있습니다.
여기에 표준 솔루션이 있습니까?
내 양식 엔터티는 다음과 같습니다.
$builder->add('broker', 'entity', array(
'class' => 'MyBundle:Broker',
'property' => 'name',
'query_builder' => function(BrokerRepository $br) {
return $br->getActiveBrokersQuery();
},
'required' => true,
'empty_value' => 'Choose a broker',
));
$builder->add('accountType', 'entity', array(
'class' => 'MyBundle:AccountType',
'empty_value' => 'Choose a broker first',
'disabled' => true,
));
선택을 비활성화하지 않으면 모든 것이 잘 작동하고 Symfony는 요청을 완벽하게 처리합니다.
나는 hakre의 제안에 따라 문제를 해결했습니다. 그래서 필드가 더 이상 비활성화되지 않는다는 것을 양식에 알려야했습니다. 따라서 양식에 PRE_SUBMIT 이벤트를 추가하여 accountType 필드에서 disabled 값을 false로 설정했습니다.
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function(FormEvent $event) {
$event->getForm()->add('accountType', 'entity', array(
'class' => 'XXBundle:AccountType',
'empty_value' => 'Choose a broker first',
'disabled' => false
));
}
);
제안 해 주셔서 감사합니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다