Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 can';I don’我不能决定要上哪门课_Php_Arrays_Forms_Symfony_Symfony Forms - Fatal编程技术网

Php Symfony can';I don’我不能决定要上哪门课

Php Symfony can';I don’我不能决定要上哪门课,php,arrays,forms,symfony,symfony-forms,Php,Arrays,Forms,Symfony,Symfony Forms,这是我的错误: 表单的视图数据应该是类的实例 My\Bundle\Entity\Tags,但它是类的实例 条令\Common\Collections\ArrayCollection。您可以避免此错误 通过将“data_class”选项设置为null或添加视图 转换类实例的转换器 条令\Common\Collections\ArrayCollection到的实例 我的\Bundle\Entity\Tags 这是我的表单生成器 $builder ->add('name

这是我的错误:

表单的视图数据应该是类的实例 My\Bundle\Entity\Tags,但它是类的实例 条令\Common\Collections\ArrayCollection。您可以避免此错误 通过将“data_class”选项设置为null或添加视图 转换类实例的转换器 条令\Common\Collections\ArrayCollection到的实例 我的\Bundle\Entity\Tags

这是我的表单生成器

 $builder
            ->add('name')
            ->add('tags','collection',array(
                        'data_class' => 'My\Bundle\Entity\Tags'
                        )
            )
            ->add('save','submit')
        ;
我将
data\u class
更改为
null
(仅此一项),并得到错误:

表单的视图数据应为标量、数组或 \ArrayAccess的实例,**但是类的实例 我的\Bundle\Entity\Tags*。通过设置 “数据\u类”选项添加到“我的\Bundle\Entity\Tags”或添加视图 转换类My\Bundle\Entity\Tags实例的转换器 到标量、数组或\ArrayAccess的实例

我试过使用变压器,所以看起来像这样:

    $transformer = new TagTransformer($this->entityManager);
    $builder
        ->add(
            $builder->create(
                'tags','collection',array(
                    'data_class' => 'My\Bundle\Entity\Tags'
                    )
            )->addModelTransformer($transformer)
        );
和变压器:

public function transform($tag)
{
    if (null === $tag) {
        return "";
    }

    return $tag->toArray();
}
并再次将
data\u class
更改为
null
。我得到的是:

表单的视图数据应为标量、数组或 \ArrayAccess的实例,但是类的实例 我的\Bundle\Entity\Tags。通过设置 “数据\u类”选项添加到“我的\Bundle\Entity\Tags”或添加视图 转换类My\Bundle\Entity\Tags实例的转换器 到标量、数组或\ArrayAccess的实例

当我将
data\u class
更改为
My\Bundle\Entity\Tags

表单的视图数据应该是类的实例 My\Bundle\Entity\Tags,但它是一个(n)数组。您可以通过以下方法避免此错误: 将“data_class”选项设置为null或通过添加视图 将(n)数组转换为的实例的转换器 我的\Bundle\Entity\Tags

嗯。。我是说。。。世界跆拳道联盟?我做错了什么?我怎样才能改变这一点

编辑:

我的用户实体:

class User
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * @ORM\ManyToMany(targetEntity="Tags", cascade={"persist"})
     */
    protected $tags;

// methods, etc..
}

因此,出现错误的原因是您使用的集合字段类型有点不正确。首先,集合字段类型不支持数据类。当你说

->add('tags','collection',array(
    'data_class' => 'My\Bundle\Entity\Tags'
     )
)
您基本上是说标记(根据您的声明,它是一个数组集合)实际上是一个标记。如果查看集合类型的文档,您会注意到data_类甚至不是受支持的选项

因此,如果你想呈现一个多选标签列表,你要寻找的是实体类型,然而这些是标签,如果你有任何一种像样的网站,你可能会有比多选列表更实用的方法。在设计方面,您只需要有一个自动完成器,在键入文本时显示已存在的标记,然后让用户按enter键添加标记,无论是否存在。然后在自动完成器的上方显示已添加的标记,并在其旁边显示和x,以便按下以删除标记


您可以通过将表单中的标记字段设置为未映射的文本类型,并在表单提交时使用javascript将标记组合成一个字符串,然后在您的操作中将该字符串转换为您的标记来作弊。

很抱歉这里的延迟,但这对您有效吗

 $builder
            ->add('name')
            ->add('tags','collection',array(
                    'type' => '**{{ NAME OF THE FORM }}**',
                )
            )
            ->add('save','submit');

在EntityProperty中发布您的标记声明,确保您需要使自己成为一个TagFormType。我不知道S2在没有标签的情况下如何为您创建一个表单标记实体。按照食谱中的例子:并将Entity\Tags重命名为Tag,否则会让你发疯。我不能按照教程进行操作,因为我需要:将集合呈现为多选列表和多文本输入。我也有一个TagFormType,但它只有一个字段,即“title”@DerickF我编辑了我的帖子,这就是你的意思吗?这真是个好主意。但若用户要添加多个标记(并没有限制),我不需要集合类型吗?因为我找不到使用实体类型的方法来实现这一点。好吧,您将无法直接获得此功能。它需要混合使用javascript和symfony。一种方法是使用一个名为tagsString的隐藏字段,并取消映射该字段。当用户点击submit时,使用javascript将标记组合成单个字符串,该字符串作为隐藏标记字符串表单字段的值传递。然后在处理表单时,将标记字符串转换为标记。