Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/08/2012, 16:55
yekamus
 
Fecha de Ingreso: agosto-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
problema en persistencia con formulario tipo entity

Estimados, luego de buscar por todo el Foro, y googlear por mas de 24 hrs, les pido ayuda con el siguiente problema: tengo un formulario con campo select del tipo entity, cuando realizo el enviar me aparece el siguiente error al hacer la persistencia:

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 %}