1
嘗試製作用戶選擇一個選項並根據其選擇加載其他字段的表單。到目前爲止,我有一個UserSignupType:Symfony3獲取事件偵聽器中非映射字段的值
class UserSignupType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('userType', ChoiceType::class, array(
'choices' => array(
"Subscriber" => "Subscriber",
"Friend" => "Friend"
),
'expanded' => true,
'mapped' => false
));
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) {
$form = $event->getForm();
$usertype = $form->get('userType')->getData(); //updated per JBaffords answer
if($userType == "Subscriber")
{
$builder->add('agency', EntityType::class, array(
"class" => "\AppBundle\Entity\Agency",
"label" => "name"));
}
elseif($userType == "Friend")
{
$builder->add('phoneNumber', PhoneNumberType::class, array(
'default_region' => 'US',
'format' => PhoneNumberFormat::NATIONAL));
}
}
);
}
// ...
}
不知道,如果GetData方法是用正確的方法,如果是,我需要以某種方式獲得了「用戶類型」字段出來。我不能調用getUserType,因爲它不是一個實際的映射屬性,我不希望它。它只是決定顯示的字段。
這似乎是正確的但我目前的代碼我最初得到與單選按鈕「訂戶」形式和「朋友「...基於哪一個被點擊,我想要加載表單的其餘部分。現在當一個人被點擊時,什麼也沒有發生......不知道我是否使用了正確的功能,想我可能需要一些JS/Ajax來做到這一點?我正在關注這個食譜頁面http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms – snoop168
@ snoop168是的,所以,你需要'$ userType = $ form-> get('userType') - > getData()'。 '$ form'是主要的形式;它的數據不會有你想要的值,因爲'userType'沒有被映射。但是,如果你得到'userType'字段(子表單),那*會包含你需要的數據。 – jbafford
我想我明白你的意思,但我不認爲它完全涵蓋了我想要做的事情,這可能是我的錯,因爲我甚至不知道我是否在正確的軌道上。有了上面的所有代碼,包括你的建議,只給我一個帶有2個單選按鈕的表單(這是我想要開始的),但是一旦選擇了一個單選按鈕,我希望表單立即用「子表單」更新。這個子窗體將根據所選的單選按鈕而有所不同。現在你選擇一個單選按鈕,沒有任何反應。 – snoop168