我正在尝试在Symfony2中创建/展开表单类型,我想要的是类似选择器,如下图所示。为此,我正在阅读symfony2 doc,章节:“如何创建自定义字段类型”(http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html)
此表的数据库具有以下方面......
我假装它在Symfony中扩展隐藏的表单类型小部件来创建我自己的类型,我在symfony的文档中找不到如何从自定义类型访问实体数据,以及如何调用custo类型对象方法在小部件的twig文件中。 (在示例中,twig文件是src / Acme / DemoBundle / Resources / views / Form / fields.html.twig)
我知道我必须做一些ajax调用来每次有人触摸类别时自动加载子类别,我在控制器中完成了这个,但首先我想知道如何做我写的。希望这个小部件可以重用于所有人:)。
非常感谢你们!
答案 0 :(得分: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/data_transformers.html