表单的视图数据应该是My \(...)类的实例,但是是(n)数组

时间:2015-03-21 20:50:21

标签: php symfony

出现错误:

  

表单的视图数据应该是类的实例   我的\ FrontendBundle \ Entity \ Intro,但是是一个(n)数组。你可以避免这种情况   设置" data_class" null的选项或添加视图的选项   将(n)数组转换为实例的变换器   我的\ FrontendBundle \实体\简介

有什么问题?

在DefaultController.php中我有

public function formularzAction(){
        $Repo = $this->getDoctrine()->getRepository('MyFrontendBundle:Intro');
        $Register = $Repo->findAll();
        $form = $this->createForm(new EditType(), $Register);
        return array(
            'form' => $form->createView(),
            'rows' => $Register
        );
    }

我的EditType.php

<?php
namespace My\FrontendBundle\Form\Type;

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

class EditType extends AbstractType{
    public function getName(){
        return 'register_form';
    }
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('info', 'textarea', array(
                    'constraints' => array(
                        ),
                    'label' => 'Informacje dodatkowe'
                ))
            ;
    }
    public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver) {
        $resolver->setDefaults(array(
            'data_class' => 'My\FrontendBundle\Entity\Intro'
        ));
        }   
}

我的Intro.php:

<?php

namespace My\FrontendBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

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

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


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set info
     *
     * @param string $info
     * @return Intro
     */
    public function setInfo($info)
    {
        $this->info = $info;

        return $this;
    }

    /**
     * Get info
     *
     * @return string 
     */
    public function getInfo()
    {
        return $this->info;
    }
}

1 个答案:

答案 0 :(得分:3)

您的表单正在等待一个且只有一个INtro实体。

您的findAll()查询将返回null或包含一个或多个Intro实例的数组。

您无法使用findAll()查询结果创建表单。

您需要提供一个id来从数据库中查找特定的Intro,或者通过数组findAll()循环,为每个结果创建一个新的IntroType实例。