3

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

类别小部件 用于此的表数据库具有以下方面...

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


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

非常感谢你们!

4

1 回答 1

3

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

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

于 2013-06-16T09:15:49.947 回答