Catchable Fatal Error: Object of class Doctrine\ORM\PersistentCollection could not be converted to string in /var/www/sf2/scge/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 2266
Código:
El Formulario: <?php namespace scge\scgeBundle\Form\Usuarios; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; use scge\scgeBundle\Entity\TipoCandidato; use scge\scgeBundle\Validator\Constraints\DNI; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Doctrine\ORM\EntityManager; class UsuarioType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('rut', 'text', array('label' => 'RUT')); $builder->add('serial_rut'); $builder->add('nombre'); $builder->add('apellidos'); $builder->add('direccion'); $builder->add('comuna_id','integer'); /*cca * Aca se Carga el Combo Box desde la Base de Datos */ $builder->add('tipocandidato', 'entity', array( 'class' => 'scgeBundle:TipoCandidato', 'property' => 'tipocandidato', 'label'=>'Candidato', 'empty_value' => false, 'multiple' => false )); //$builder->add('tipocandidato','integer'); $builder->add('gastolimite'); $builder->add('fono'); $builder->add('movil'); $builder->add('email', 'email'); $builder->add('rol'); $builder->add('password', 'repeated', array('type' => 'password')); } public function getDefaultOptions(array $options) { return array( 'data_class' => 'scge\scgeBundle\Entity\Usuario', ); } public function getName() { return 'usuario'; } }
Código:
EL controlador public function registroAction() { $form = $this->get('form.factory')->create(new UsuarioType(), array()); $request = $this->get('request'); if ($request->getMethod() == 'POST') { $form->bindRequest($request); if ($form->isValid()) { // Mensaje para notificar al usuario que todo ha salido bien $session = $this->get('request')->getSession(); $session->setFlash('notice', 'Usuario Creado Satisfactoriamente'); // cca -- Obtenemos el usuario $usuario = new Usuario(); $tipo =new TipoCandidato; $usuarios = $form->getData(); // $tipo = $usuarios['tipocandidato']; /*cca -- Aca se lee el dato para mantener la persistenacia de N a 1 sin escribir en ambas tablas ... */ $comuna= $this->getDoctrine()->getRepository('scgeBundle:Comuna')->find($usuarios['comuna_id']); /* Aca es donde tengo el problema, si lo envio como int, no tengo problemas, pero si lo envio como entity comienzan los Errores*/ $tipocandidato= $this->getDoctrine()->getRepository('scgeBundle:TipoCandidato')->find($usuarios['tipocandidato']); $usuario->setRut($usuarios['rut']); $usuario->setSerialRut($usuarios['serial_rut']); $usuario->setNombre($usuarios['nombre']) ; $usuario->setApellidos($usuarios['apellidos']); $usuario->setDireccion($usuarios['direccion']); $usuario->setFono($usuarios['fono']); $usuario->setMovil($usuarios['movil']); $usuario->setGastolimite($usuarios['gastolimite']); // cca -- Aca se pone el dato en la tabla 1 a N $usuario->setComuna($comuna); $usuario->setTipocandidato($tipocandidato); // cca- Fin persistencia $usuario->setRol('ROLE_USER'); $usuario->setEmail($usuarios['email']) ; $usuario->setPassword($usuarios['password']); $usuario->setBloqueado('0') ; // Codificamos el password $factory = $this->get('security.encoder_factory'); $codificador = $factory->getEncoder($usuario); $password = $codificador->encodePassword($usuario->getPassword(), $usuario->getSalt()); $usuario->setPassword($password); // Guardamos el objeto en base de datos $em = $this->get('doctrine')->getEntityManager(); $em->persist($usuario); $em->persist($comuna); $em->persist($tipocandidato); $em->flush(); // Logueamos al usuario $token = new UsernamePasswordToken($usuario, null, 'main', $usuario->getRoles()); $this->get('security.context')->setToken($token); return $this->redirect($this->generateUrl('portada')); } } return $this->render('scgeBundle:Usuario:registro.html.twig', array('form' => $form->createView())); }
Código:
La Vista {% extends "scgeBundle::layout.html.twig" %} {% block title %}Registro de Candidatos{% endblock %} {% block metadesc %}Registro de Usuarios SCGE{% endblock %} {% block pageid 'registro' %} {% block contenido %} <h1>Registro</h1> {% if( app.session.flash('notice') ) %} <div class="notice"> <p>{{ app.session.flash('notice') }}</p> </div> {% endif %} {{ form_errors(form) }} <form action="{{ path('registro') }}" method="post" {{ form_enctype(form) }}> <div class="grid_6 alpha"> {{ form_errors(form.rut) }} <p> {{ form_label(form.rut) }} {{ form_widget(form.rut) }} </p> {{ form_errors(form.serial_rut) }} <p> {{ form_label(form.serial_rut) }} {{ form_widget(form.serial_rut) }} </p> {{ form_errors(form.nombre) }} <p> {{ form_label(form.nombre) }} {{ form_widget(form.nombre) }} </p> {{ form_errors(form.apellidos) }} <p> {{ form_label(form.apellidos) }} {{ form_widget(form.apellidos) }} </p> {{ form_errors(form.direccion) }} <p> {{ form_label(form.direccion) }} {{ form_widget(form.direccion) }} </p> {{ form_errors(form.tipocandidato) }} <p> {{ form_label(form.tipocandidato) }} {{ form_widget(form.tipocandidato) }} </p> {{ form_errors(form.gastolimite) }} <p> {{ form_label(form.gastolimite) }} {{ form_widget(form.gastolimite) }} </p> {{ form_errors(form.comuna_id) }} <p> {{ form_label(form.comuna_id) }} {{ form_widget(form.comuna_id) }} </p> {{ form_errors(form.fono) }} <p> {{ form_label(form.fono) }} {{ form_widget(form.fono) }} </p> {{ form_errors(form.movil) }} <p> {{ form_label(form.movil) }} {{ form_widget(form.movil) }} </p> {{ form_errors(form.email) }} <p> {{ form_label(form.email) }} {{ form_widget(form.email) }} </p> {{ form_errors(form.rol) }} <p> {{ form_label(form.rol) }} {{ form_widget(form.rol) }} </p> </div> <div class="grid_6 alpha"> {{ form_errors(form.password.first) }} <p> {{ form_label(form.password.first, 'Contraseña') }} {{ form_widget(form.password.first) }} </p> </div> <div class="grid_6 omega"> {{ form_errors(form.password.second) }} <p> {{ form_label(form.password.second, 'Repetir contraseña') }} {{ form_widget(form.password.second) }} </p> </div> {{ form_errors(form._token) }} {{ form_widget(form._token) }} <input type="submit" value="Regístrate" /> </form> {% endblock %} {% block lateral %} <div class="usuario"> <p>¿Ya estás registrado? <a href="{{ path('login') }}">Haz login</a></p> </div> <h3>Ventajas de asistir a las jornadas</h3> <ul> <li>Lorem ipsum et dolor</li> <li>Lorem ipsum et dolor</li> <li>Lorem ipsum et dolor</li> </ul> <h3>Preguntas frecuentes</h3> <ul> <li>Lorem ipsum et dolor</li> <li>Lorem ipsum et dolor</li> <li>Lorem ipsum et dolor</li> </ul> {% endblock %}