Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 添加子字段时symfony自定义表单字段类型错误_Php_Forms_Symfony - Fatal编程技术网

Php 添加子字段时symfony自定义表单字段类型错误

Php 添加子字段时symfony自定义表单字段类型错误,php,forms,symfony,Php,Forms,Symfony,我有一个实体Nace,它保存分层数据。它作为多对一协会映射到实体组织 下表将nace属性呈现为一个下拉列表,其中nace中的所有记录均按预期显示我的起点 class OrganisationType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name'

我有一个实体Nace,它保存分层数据。它作为多对一协会映射到实体组织

下表将nace属性呈现为一个下拉列表,其中nace中的所有记录均按预期显示我的起点

class OrganisationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('nace')
        ;
     }
}
由于Nace包含数百条记录,我想实现一个定制的FieldType

这将添加第二个实体选择字段,其中包含来自相同表类别的更高级别选项 当用户选择一个类别时,它通过ajax填充主选项字段 当我添加naceCategory子字段并尝试呈现表单时,我得到一个与数据映射相关的错误。 为了绘制数据流,我添加了一个ModelTransformer,但从未调用transform和reverseTransform方法。这是我的密码:

模板

吊舱式

错误

类比 让我试着给你一个更好的想法,我试图实现什么,因为这个Nace的事情是相当未知的。 基本上,我需要两个级联下拉列表。假设您在一个表中列出了世界上所有城市的列表,并且希望用户只选择1个。由于列表太长,您可能希望用户首先从另一个未与目标实体映射的下拉列表中选择一个国家,该下拉列表应使用有限的城市列表填充您的城市下拉列表

在我的例子中,nace对应于城市下拉列表,初始为空,naceCategory对应于国家下拉列表,该下拉列表始终填充有repo方法getCategoriesQueryBuilder。城市/国家exmaple的唯一区别在于,两个下拉列表都来自同一个表/实体Nace,只是具有不同层次的值


有人知道我遗漏了什么吗?

nace类别是另一个表还是nace表中的一列?@SenseException naceCategory是同一个表/实体上的一个实体字段。通过查询生成器选项,存储库方法筛选出nace类别子字段的更高级别记录和nace字段的叶记录。不确定我是否说得很清楚。也许naceCategory应该有一个自己的实体,这样你就可以使用NaceType中的EntityType作为类别。或者不创建自己的实体是有原因的吗?它必须是一个实体。它是树结构@Gedmo\Tree中的所有相同数据。
class OrganisationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name')
            ->add('nace')
        ;
     }
}
{% block nace_widget %}
    {{ form_widget(form) }}
    {{ form_widget(form.naceCategory) }}
{% endblock %}
class NaceType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'compound'      => true,
            'mapped'        => true,
            'required'      => true,
            'class'         => 'Pftp\UserBundle\Entity\Nace',
            'query_builder' => function(NaceRepository $er) {
                return $er->createQueryBuilder('node')->where('1=0');
            },
        ));
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add($builder->create('naceCategory', 'entity', array(
                'mapped'        => false,
                'required'      => false,
                'class'         => 'Pftp\UserBundle\Entity\Nace',
                'query_builder' => function(NaceRepository $er) {
                    return $er->getCategoriesQueryBuilder();
                }
            )))
            ->addModelTransformer(new NaceTransformer())
        ;
    }

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

    public function getName()
    {
        return 'nace';
    }
}
Expected argument of type "object, array or empty", "string" given 

at PropertyPathMapper ->mapDataToForms ('', object(RecursiveIteratorIterator))
in W:\Symfony2\Sources\pftpprod\vendor\symfony\symfony\src\Symfony\Component\Form\Form.php at line 385  +
at Form ->setData (null)
in W:\Symfony2\Sources\pftpprod\vendor\symfony\symfony\src\Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper.php at line 57  +
at PropertyPathMapper ->mapDataToF...