Reputation: 491
the error that arises in symfony is as follows:
Expected argument of type "string or Symfony\Component\Form\FormTypeInterface", "Proyecto\LavocBundle\Entity\Datos" given
I will not put all code so that it does not become too large , I think the problem is in the Type:
DatosType:
<?php
namespace Proyecto\LavocBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class DatosType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('empresa');
$builder->add('cuit');
$builder->add('localidad');
$builder->add('calle');
$builder->add('altura');
$builder->add('areaTel');
$builder->add('telefono');
$builder->add('areaCel');
$builder->add('celular');
$builder->add('email');
}
public function getName()
{
return 'datos_form';
}
}
UserType:
<?php
namespace Proyecto\LavocBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('usuario');
$builder->add('pass');
}
public function getName()
{
return 'user_form';
}
}
RegistroUsuarioType (this is the embedded form) :
<?php
namespace Proyecto\LavocBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Proyecto\LavocBundle\Entity\Datos;
class RegistroUsuarioType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options) {
parent::buildForm($builder, $options);
$builder->add('usuario', 'text');
$builder->add('pass', 'text');
$builder->add('datos', new Datos());
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Proyecto\LavocBundle\Entity\User'
));
}
public function getName() {
return 'RegistroUsuario_form';
}
}
TablaController:
public function crearUsuarioDatosAction()
{
$request = $this->getRequest();
$usuario = new User();
$datos = new Datos();
$usuario->setDatos($datos);
$form = $this->createForm(new RegistroUsuarioType(), $usuario);
if($request->getMethod() == 'POST')
{
$form->bind($request);
if( $form->isValid() )
{
$em = $this->getDoctrine()->getEntityManager();
$em->persist($form);
$em->flush();
return $this->redirect($this->generateUrl('home'));
}
}
return $this->render('AtajoBundle:IngresarValores:crearUsuarioDatos.html.twig', array('form' => $form->createView()));
}
I thank you all very grateful for your help
Upvotes: 1
Views: 3414
Reputation: 4129
$builder->add('datos', new Datos());
should be
$builder->add('datos', new DatosType());
Also your DatosType needs the data_class property set, add this function to your DatosType class:
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Proyecto\LavocBundle\Entity\Datos',
));
}
For newer versions of Symfony2 configureOptions instead of setDefaultOptions
Make sure your DatosType has:
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
Upvotes: 1