简体   繁体   English

关系'OneToMany'Symfony2-错误

[英]Relationship ' OneToMany ' Symfony2 - Error

I have this error in my project of symfony2: 我的symfony2项目中出现此错误:

The form's view data is expected to be an instance of class Proyecto\\AdminBundle\\Entity\\Unidades , but is an instance of class Proyecto\\AdminBundle\\Entity\\Catalogo . 表单的视图数据应该是Proyecto\\AdminBundle\\Entity\\Unidades类的实例,但是是Proyecto\\AdminBundle\\Entity\\Catalogo类的实例。 You can avoid this error by setting the "data_class" option to null or by adding a view transformer that transforms an instance of class Proyecto\\AdminBundle\\Entity\\Catalogo to an instance of Proyecto\\AdminBundle\\Entity\\Unidades . 您可以通过将“ data_class”选项设置为null或通过添加将类Proyecto\\AdminBundle\\Entity\\Catalogo的实例转换为Proyecto\\AdminBundle\\Entity\\Unidades的实例的视图转换器来避免此错误。

Obviates several things as getters , setters and properties of entities. 消除了实体的获取器,设置器和属性。

Catalogo.php Catalogo.php

    class Catalogo
    {
     /**
     * @ORM\OneToMany(targetEntity="Unidades", mappedBy="catalogo")
     */
    protected $unidades;

    public function __construct()
    {
        $this->unidades = new ArrayCollection();
    }

    public function getUnidades()
    {
        return $this->unidades;
    }

    public function setUnidades($unidades)
    {
        $this->unidades[] = $unidades;
        foreach ($unidades as $unidad) {
        $unidad->setCatalogo($this);
        }
    }

Unidades.php Unidades.php

class Unidades
{
    /**
    * @ORM\ManyToOne(targetEntity="Catalogo", inversedBy="unidades")
    * @ORM\JoinColumn(name="catalogo_id", referencedColumnName="id")
    */
    protected $catalogo;

   /**
     * Set catalogo
     *
     * @param float $catalogo
     * @return Unidades
     */
    public function setCatalogo($catalogo)
    {
        $this->catalogo = $catalogo;

        return $this;
    }

    /**
     * Get catalogo
     *
     * @return float 
     */
    public function getCatalogo()
    {
        return $this->catalogo;
    }

CatalogoUnidadesType.php CatalogoUnidadesType.php

<?php

namespace Proyecto\AdminBundle\Form;

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


class CatalogoUnidadesType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) 
    {
        $builder->add('catalogo', new CatalogoType());
        $builder->add('unidades', new UnidadesType());

    }

    public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Proyecto\AdminBundle\Entity\Unidades'
        ));
    }

    public function getName()
    {
    return 'catalogounidades_form';
    }

}

CatalogoType.php CatalogoType.php

<?php

namespace Proyecto\AdminBundle\Form;

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


class CatalogoType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) 
    {
        $builder->add('articulo');
        $builder->add('descripcion');

    }

    public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Proyecto\AdminBundle\Entity\Catalogo'
        ));
    }

    public function getName()
    {
    return 'catalogo_form';
    }

}

UnidadesType.php UnidadesType.php

<?php

namespace Proyecto\AdminBundle\Form;

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


class UnidadesType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) 
    {
        $builder->add('medida');
        $builder->add('precio');

    }

    public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Proyecto\AdminBundle\Entity\Unidades'
        ));
    }

    public function getName()
    {
    return 'unidades_form';
    }

}

AdminController.php AdminController.php

public function agregarProductoCategoriaAction($tipo)
    {
        $request = $this->getRequest();
        $catalogo = new Catalogo();
        $unidades = new Unidades();
        $catalogo->setUnidades($unidades);
        $form = $this->createForm(new CatalogoUnidadesType(), $catalogo);

        /**........

        **/

       return $this->render('ProyectoAdminBundle:Admin:agregarProductoCategoria.html.twig', array('form' => $form->createView(), 'tipo' => $tipo));
    }

You should build a class with name of CatalogoUnidades that includes both Catalog and Unidades and then make a FormType for it. 您应该建立一个名称为CatalogoUnidades的类,同时包含CatalogUnidades ,然后Unidades创建FormType。

I hope this helps. 我希望这有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM