【问题标题】:Extending form types in Symfony2 (aka creating a new form widget)在 Symfony2 中扩展表单类型(也就是创建一个新的表单小部件)
【发布时间】:2013-06-15 21:44:24
【问题描述】:

我正在尝试在 Symfony2 中创建/扩展表单类型,我想做的是如下图所示的类别选择器。为此,我在 symfony2 文档中阅读,章节:“如何创建自定义字段类型”(http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html)

这个的表数据库有以下几个方面...

我假装它在 Symfony 中的扩展隐藏表单类型小部件以创建我自己的类型,我在 symfony 的文档中找不到如何从自定义类型访问实体数据,以及如何调用自定义类型对象方法在小部件的树枝文件中。 (在示例中,twig 文件是 src/Acme/DemoBundle/Resources/views/Form/fields.html.twig )


我知道每次有人触摸一个类别时我都必须执行一些 ajax 调用来自动加载子类别,我已经在控制器中完成了此操作,但首先我想知道如何执行我写的内容。希望这个小部件可供所有人重复使用:)。

非常感谢大家!

【问题讨论】:

  • 你读过这篇文章了吗? symfony.com/doc/current/cookbook/form/…
  • 嗨垫,是的,我读过那篇文章,但我不明白如何从类型类访问实体。感谢您的帮助。
  • 只需重新阅读您的问题,您确实提到了文档 - 抱歉! 脸红

标签: symfony widget


【解决方案1】:

您应该将您的新类型声明为服务并将实体管理器注入其中:

namespace Your\Bundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

use Doctrine\ORM\EntityManager;

class NewExampleType extends AbstractType
{

    protected $em;

    public function __construct(EntityManager $entityManager)
    {
        $this->em = $entityManager;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        //your code
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        //your code
    }

    public function getParent()
    {
        return 'hidden';
    }

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

然后,在 services.yml 中声明新服务

services:
  example.type:
    class:  Your\Bundle\Form\Type\NewExampleType
    arguments: ["@doctrine.orm.entity_manager"]
    tags:
        - { name: form.type, alias: "example_widget" }

来源:http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html#creating-your-field-type-as-a-service

那么,你应该看看这里:http://symfony.com/doc/current/cookbook/form/data_transformers.html

【讨论】:

  • 感谢 Mehdi,我会尝试并写。
猜你喜欢
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多