Symfony3 在事件侦听器中获取非映射字段的值
Symfony3 get the value of a non mapped field in event listener
尝试制作一个用户选择选项的表单,并根据他们的选择加载其他字段。到目前为止,我有一个 UserSignupType:
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 方法是否是正确的使用方法,如果是,我需要以某种方式从中获取 "userType" 字段。我不能调用 getUserType 因为它不是实际映射的 属性 而且我不希望它是。它只是决定要显示的字段。
您可以通过以下方式获取任何表单元素(映射或未映射)的值:
$form->get('fieldName')->getData();
get()
returns一个Form
object,所以如果你有一个嵌套的表格,你可以在每个[=26上继续调用->get('nextFieldName')
=] 直到找到所需的表单元素。
从 getData
返回的表单值将取决于(除其他外)其 child 元素的映射。如果表格没有children,那么它的值就是它的值;该映射仅确定该值是否填充到其 parent 的数据中。
在您的特定情况下,要获取 userType
元素的数据,您可以:
$userType = $form->get('userType')->getData();
尝试制作一个用户选择选项的表单,并根据他们的选择加载其他字段。到目前为止,我有一个 UserSignupType:
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 方法是否是正确的使用方法,如果是,我需要以某种方式从中获取 "userType" 字段。我不能调用 getUserType 因为它不是实际映射的 属性 而且我不希望它是。它只是决定要显示的字段。
您可以通过以下方式获取任何表单元素(映射或未映射)的值:
$form->get('fieldName')->getData();
get()
returns一个Form
object,所以如果你有一个嵌套的表格,你可以在每个[=26上继续调用->get('nextFieldName')
=] 直到找到所需的表单元素。
从 getData
返回的表单值将取决于(除其他外)其 child 元素的映射。如果表格没有children,那么它的值就是它的值;该映射仅确定该值是否填充到其 parent 的数据中。
在您的特定情况下,要获取 userType
元素的数据,您可以:
$userType = $form->get('userType')->getData();