Php 在用户在“选择”字段中选择内容后显示新表单字段
我用Symfony表单类型制作了一个简单表单Php 在用户在“选择”字段中选择内容后显示新表单字段,php,symfony,Php,Symfony,我用Symfony表单类型制作了一个简单表单 public function buildForm(FormBuilderInterface $builder, array $options) { $factory = $builder->getFormFactory(); $domainsNamesTransformer = new DomainsNamesTransformer(); $builder->add( $builder->
public function buildForm(FormBuilderInterface $builder, array $options)
{
$factory = $builder->getFormFactory();
$domainsNamesTransformer = new DomainsNamesTransformer();
$builder->add(
$builder->create('domains', TextareaType::class, [
'label' => 'form.names',
'translation_domain' => 'global',
'constraints' => [
new Assert\NotBlank(),
],
])
->addModelTransformer($domainsNamesTransformer)
);
// Limit to user servers
$builder->add('server', EntityServerType::class, [
'user' => $options['user'],
'nadmin_compliant' => true,
'ip_network' => IpV4::NETWORK_PUBLIC,
'required' => true,
'constraints' => [
new Assert\NotBlank(),
],
]);
// Ask if user want a database
$askDatabase = function (FormInterface $form, $server) {
if ($server != null && $server->getMysqlServer === true) {
$form->add('database', CheckboxType::class, [
'label' => 'domain.form.associated_databases',
'translation_domain' => 'front',
'required' => false,
]);
}
};
}
当用户在server
字段中选择一个选项时,我试图显示一个新字段。
所以我做了一个eventListener
来做这个,但是当我选择一个选项时,没有任何附加
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($askDatabase) {
$form = $event->getForm();
$data = $event->getData();
if (array_key_exists('server', $data)) {
$askDatabase($form, $data['server']);
}
});
我还尝试了POST\u SET\u DATA
和PRE\u SUBMIT
,但没有附加任何内容
编辑
数组键server
存在于$data
中,因为当我转储它时,在加载页面时会得到null
这在eventListener
中是可行的还是错误的方法?
我该怎么做
感谢您的帮助。何时要添加附加字段?当用户编辑此数据时,或当用户添加新实体时,
服务器
字段是一个带有服务器列表的选择字段,因此当用户在此列表中选择一个服务器时,将添加新字段。这仅在您传输(在用户选择某个服务器后)时才可能进行通过ajax将整个序列化表单转换为控制器操作,并让控制器操作操作表单,然后您必须通过json将表单传输回,并在需要添加附加字段时用更新的表单替换旧表单?当用户编辑此数据时,或当用户添加新实体时,服务器
字段是一个带有服务器列表的选择字段,因此当用户在此列表中选择一个服务器时,将添加新字段。这仅在您传输(在用户选择某个服务器后)时才可能进行通过ajax将整个序列化表单转换为控制器操作,并让控制器操作操作表单,然后必须通过json将表单传输回,并用更新的表单替换旧表单