PHP + SIlex + Mysql通过查询决定使用的表单类型

时间:2015-08-20 22:08:20

标签: php forms silex

我有这个小问题(我是初学者,而不是英语母语人士,所以请原谅我的愚蠢),我谦卑地请求你的帮助。我正在编写一个测量系统。根据调查创建者选择制作(关闭或打开)的问题类型,我希望此表单显示选项或文本区域。 我真的不知道如何做这样的事情,如果' 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{

         }

    }

1 个答案:

答案 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();
    });
}