[英]Symfony2 post submit event on a form input that is generated after a pre set data event
我的情況如下:我有一個多步驟注冊表格。 在第一步,用戶選擇他的角色(買方,供應商),然后進入第二步。 如果用戶選擇了角色“買方”,則表單中將包含輸入字段“公司”。 當用戶選擇isCompany = true時,將顯示其他字段。 我想將post_submit事件附加到字段“ isCompany”,但是我不知道如何執行此操作,因為此字段是由pre_set事件生成的,並且在首次呈現表單時不包括該字段。 我的表格類型:
$builder
->add('firstName')
->add('lastName')
->add('telephone')
->add('email', 'email')
->add('password', 'repeated', array(
'first_name' => 'password',
'second_name' => 'confirm',
'type' => 'password',
));
$formModifier = function (FormInterface $form, $isCompany) {
if ($isCompany == true) {
$form->add('company', new CompanyType());
}
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
$user = $event->getData();
$form = $event->getForm();
if ($user->getRole()->getRole() === 'ROLE_BUYER') {
$form->add('isCompany', 'choice', array(
'choices' => array('0' => 'Citizen', '1' => 'Company'),
));
$formModifier($event->getForm(), $user->getIsCompany());
}
}
);
$builder->get('isCompany')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
// It's important here to fetch $event->getForm()->getData(), as
// $event->getData() will get you the client data (that is, the ID)
$isCompany = $event->getForm()->getData();
// since we've added the listener to the child, we'll have to pass on
// the parent to the callback functions!
$formModifier($event->getForm()->getParent(), $isCompany);
}
);
$builder
->add('nextStep', 'submit')
->add('previousStep', 'submit', array(
'validation_groups' => false,
));
}
在第一個事件監聽器中添加第二個事件監聽器:
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
// put your POST_SUBMIT listener inside $otherListener, see below for more details
function (FormEvent $event) use ($formModifier, $otherListener) {
$user = $event->getData();
$form = $event->getForm();
if ($user->getRole()->getRole() === 'ROLE_BUYER') {
$form->add( //note this part:
$builder->create('isCompany', 'choice', array(
'choices' => array('0' => 'Citizen', '1' => 'Company'),)
)->addEventListener(FormEvents::POST_SUBMIT, $otherListener) // $otherListener is the listener you use in the post submit event (just like you've included in the question)
);
$formModifier($event->getForm(), $user->getIsCompany());
}
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.