07/08/2012, 16:55
|
| | 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 %}
|