【问题标题】:How do I amend a Symfony2 form based on field value selected by the user?如何根据用户选择的字段值修改 Symfony2 表单?
【发布时间】:2013-03-24 14:21:31
【问题描述】:

我有一个 Blog 类型,并且我希望仅当用户在 select 字段中进行特定选择时才将某些字段添加到表单中。我听说过 EventListener,但我认为没有可以订阅的 FormEvent,因此侦听器实际上可以跟踪选择事件。

我怎样才能做到这一点?

这是我的博客类型

namespace Blogger\BlogBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Blogger\BlogBundle\Form\EventListener\AddAuthorFieldSubscriber;

class BlogType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('blog')
            ->add('category', 'entity', array(
                'class' => 'BloggerBlogBundle:Category',
                'property' => 'name',
            )
            ->add('onlyifdefaultcategory')
        );
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Blogger\BlogBundle\Entity\Blog',
            'cascade_validation' => true,
        ));
    }

    public function getName()
    {
        return 'blogger_blogbundle_blogtype';
    }
}

【问题讨论】:

  • 有什么解决办法吗?我遇到了同样的问题,请在用户在选择字段中进行特定选择后填写表单。

标签: forms symfony event-listener


【解决方案1】:

当您说必须使用事件侦听器来实现这一点时,您是对的。 Symfony 食谱中有一篇非常好的文章:Here is the Cookbook

您必须检查“根据基础数据自定义表单”部分。

如果您需要更多信息,请告诉我们,但我认为第一个示例正是您所需要的。

【讨论】:

    【解决方案2】:

    我认为它只能使用 JavaScript。您可以使用 JS 创建自定义 Type 并为该 Type 声明小部件,这使得它成为可能。

    对于构建表单,这里是监听器的示例。 检查这个:symfony manual

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2013-09-09
      • 2020-09-03
      • 1970-01-01
      • 2021-03-19
      相关资源
      最近更新 更多