Отношения «OneToMany» Symfony2 — Ошибка

У меня есть эта ошибка в моем проекте symfony2:

Ожидается, что данные вида формы будут экземпляром класса Proyecto\AdminBundle\Entity\Unidades, но является экземпляром класса Proyecto\AdminBundle\Entity\Catalogo, Вы можете избежать этой ошибки, установив для параметра data_class значение null или добавив преобразователь представления, преобразующий экземпляр класса. Proyecto\AdminBundle\Entity\Catalogo к примеру Proyecto\AdminBundle\Entity\Unidades,

Исключает несколько вещей, таких как геттеры, сеттеры и свойства сущностей.

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

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

<?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

<?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

<?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

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));
}

2

Решение

Вы должны построить класс с именем CatalogoUnidades это включает в себя как Catalog а также Unidades а затем сделать для него FormType.

Надеюсь, это поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]