我有这个小问题(我是初学者,而不是英语母语人士,所以请原谅我的愚蠢),我谦卑地请求你的帮助。我正在编写一个测量系统。根据调查创建者选择制作(关闭或打开)的问题类型,我希望此表单显示选项或文本区域。 我真的不知道如何做这样的事情,如果' ifs'形式甚至是可能的。 (请不要将我发送到文档页面,它是黑暗的,充满了尸体)。下面的粗略代码。
public function buildForm(FormBuilderInterface $builder, array $options)
{
->add(
'answers',
'choice',
array(
'choices' => $this->xxx($this->app),
'expanded' => false
)
)
->add(
'answers',
'textarea',
if (question.type == 'closed'){
}else{
}
}
答案 0 :(得分:0)
如果不阅读documentation,你就不可能完成这项工作。这是一个相当高级的主题,涉及Symfony FormBuilderInterface
的几个不同方面,可能需要服务器端php
和客户端javascript
。
你在做什么似乎与Dynamic Generation for Submitted Forms中解释的类似。此方法使用事件侦听器和表单修饰符函数。
例如,您可以根据POST_SET_DATA事件修改表单,根据另一个字段中的数据添加其他字段。
这是一个框架buildForm方法,它显示了所有可用的事件侦听器:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$options = array('open','closed');
$choices = array('choice a','choice b','choice c');
$builder
->add('answer_option', 'choice',
array(
'choices' => $options,
'expanded' => true
)
)
->add('answer_choices', 'choice',
array(
'choices' => $choices,
'expanded' => false
)
)
->add('answer_textarea', 'textarea')
->add('submit', 'submit')
;
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
error_log(print_r('PRE_SET_DATA',1).' '.__FILE__.' '.__LINE__.PHP_EOL,0);
$data = $event->getData();
$form = $event->getForm();
});
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
error_log(print_r('POST_SET_DATA',1).' '.__FILE__.' '.__LINE__.PHP_EOL,0);
$data = $event->getData();
$form = $event->getForm();
});
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
error_log(print_r('PRE_SUBMIT',1).' '.__FILE__.' '.__LINE__.PHP_EOL,0);
$data = $event->getData();
$form = $event->getForm();
});
$builder->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
error_log(print_r('SUBMIT',1).' '.__FILE__.' '.__LINE__.PHP_EOL,0);
$data = $event->getData();
$form = $event->getForm();
});
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
error_log(print_r('POST_SUBMIT',1).' '.__FILE__.' '.__LINE__.PHP_EOL,0);
$data = $event->getData();
$form = $event->getForm();
});
}