php - 有没有办法根据 Symfony 上的条件添加表单字段?
问题描述
朋友们。这是我在这里提出的第一个问题;所以,任何反馈都将受到欢迎。
我是 Symfony 的新手;我正在使用的版本是 3.4 我已经为我的表单实现了三个 Type 类,结构是这样的:有一个注册表,它的标题加零,一个或多个问题。每个问题都是一个“RegistryElement”,由零个、一个或多个答案加上一个“elementScore”和一个可选的“elementComment”组成。
Type 类的 buildForm 方法如下所示:
在 RegistryType.php 上:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('registryHeaderId', RegistryHeaderType::class, array(
'label' => false,
))
->add('registryElements', CollectionType::class, array(
'label'=>false,
'entry_type' => RegistryElementType::class,
'entry_options' => [
'label' => false,
'tokens'=>$options['tokens'],
],
'allow_add' => true,
'by_reference' => false,
))
->add('save', SubmitType::class, array("attr"=>array(
"class"=>"form-submit btn-success",
"style"=>"margin:10px;"
)))
;
}
在 RegistryElementType.php 上:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('registryElementAnswers', CollectionType::class, array(
'label'=>false,
'entry_type' => RegistryElementAnswerType::class,
'entry_options' => [
'label' => false,
],
'allow_add' => true,
'by_reference' => false,
))
->add('elementScore', CheckboxType::class, array(
"label"=>'type.registry_element_type.score',
'required' => false,
"translation_domain" => "FirstPieceBundle",
))
->add('elementComment', TextType::class, array(
"label"=>'type.registry_element_type.element_comment',
"required"=>false,
"attr"=>array(
"class"=>"form-name form-control",
),
"translation_domain" => "FirstPieceBundle",
))
;
}
并且,在 RegistryElementAnswerType.php 上:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('answer', TextType::class, array(
"label"=>false,
"required"=>false,
"attr"=>array(
"class"=>"form-name form-control",
),
"translation_domain" => "FirstPieceBundle",
))
;
}
现在,我想知道是否有一种方法可以根据条件“添加不同类型的字段”。像这样的东西:
public function buildForm(FormBuilderInterface $builder, array $options)
{
if(condition){
$builder
->add('answer', TextType::class, array(
"label"=>false,
"required"=>false,
"attr"=>array(
"class"=>"form-name form-control",
),
"translation_domain" => "FirstPieceBundle",
))
;
}
else{
$builder
->add('answer', ChoiceType::class, array(
"label"=>false,
"required"=>false,
"attr"=>array(
"class"=>"form-name form-control",
),
"translation_domain" => "FirstPieceBundle",
))
;
}
}
我试图通过 $options 数组传递一些值,但我真的被困在这里。我非常感谢您的知识和指导。
问候。
解决方案
您需要在那里使用的具体条件是什么?
如果要在$options
数组中传递数据,则需要在方法中添加选项键作为必需选项configureOptions
。
假设您要传入condition
,$options
您的RegistryElementAnswerType
类应包含:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired('condition');
}
现在,每当您引用RegistryElementAnswerType
.