Foros del Web » Programando para Internet » PHP » Symfony »

guardar los datos del usuario junto al Formulario

Estas en el tema de guardar los datos del usuario junto al Formulario en el foro de Symfony en Foros del Web. Estimados Soy nuevo en esto de Symfony, les cuento tengo dos tablas usuario e ingresos y estoy haciendo un formulario para ingresar los ingresos de ...
  #1 (permalink)  
Antiguo 08/08/2012, 18:29
 
Fecha de Ingreso: agosto-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
guardar los datos del usuario junto al Formulario

Estimados Soy nuevo en esto de Symfony, les cuento tengo dos tablas usuario e ingresos y estoy haciendo un formulario para ingresar los ingresos de un usuario, por lo que cada usuario ingresara sus propios ingresos, lo que necesito hacer es mantener el ID del usuario y enviarlo a la base de datos junto con el formulario, antes con PHP puro sabia hacerlo, pero ahora con Symfony se me esta complicando mucho esto....Agradesco desde ya la Ayuda, gracias...



Código:
EL FORMULARIO

namespace scge\scgeBundle\Form\Usuarios;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

use scge\scgeBundle\Validator\Constraints\DNI;

class IngresosType extends AbstractType
{

    public function buildForm(FormBuilder $builder, array $options)
    {
        
                
        $builder->add('numero', 'text', array('label' => 'Numero'));
        $builder->add('RUT');
       
        $builder->add('plancta_id', 'entity',
            array('label' => 'Plan Cuenta',
                'class' => 'scgeBundle:PlanCta',
                'property' => 'nombre',
                'required' => 'true',
                 'query_builder' => function (\Doctrine\ORM\EntityRepository $repository)
                 {
                     return $repository->createQueryBuilder('p')
                            ->where('p.codigo like :codigo')
                            ->setParameter('codigo', '1%');
                 }
                )
              );
                
        $builder->add('tipodoc', 'entity',
            array('label' => 'Tipo Documento',
                'class' => 'scgeBundle:TipoDoc',
                'property' => 'descripcion',
                'required' => 'true',
                 'query_builder' => function (\Doctrine\ORM\EntityRepository $repository)
                 {
                     return $repository->createQueryBuilder('td')
                            ->where('td.tipo like :tipo')
                            ->setParameter('tipo', 'ingreso')
                            ;
                 }
                )
              );

        $builder->add('nombre','text', array('label' => 'Nombre '));
        $builder->add('rut', 'text', array('label' => 'Rut '));
        $builder->add('fecha');
        
        $builder->add('glosapago','textarea');
        $builder->add('monto', 'text');
       
        
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'scge\scgeBundle\Entity\Ingreso',
        );
    }

    public function getName()
    {
        return 'nombre';
    }

}
Código:
EL CONTROLADOR

public function ingresoAction()
    {
        $form = $this->get('form.factory')->create(new IngresosType(), 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');
           
                $ingasto = new Ingreso();
    
                $ingastos = $form->getData();
                //$username = $this->getUser()->getUsername();
               
                            
                $ingasto->setCtacont($ingastos['plancta_id']);
                $ingasto->setEstado(0);
                $ingasto->setFecha($ingastos['fecha']);
                $ingasto->setGlosa($ingastos['glosapago']);
                $ingasto->setMonto($ingastos['monto']);
                $ingasto->setNombre($ingastos['nombre']);
                $ingasto->setNula(0);
                $ingasto->setNumero($ingastos['numero']);
                $ingasto->setRUT($ingastos['rut']);
                $ingasto->setTipodoc($ingastos['tipodoc']);
                $ingasto->setUsuario($username);
                     
             // Guardamos el objeto en base de datos
                $em = $this->get('doctrine')->getEntityManager();
                $em->persist($ingasto);
                $em->flush($ingasto);

                return $this->render('scgeBundle:Usuario:ingreso.html.twig', array('form' => $form->createView()));
            }
        }
        return $this->render('scgeBundle:Usuario:ingreso.html.twig', array('form' => $form->createView()));
    }

Código:
LA VISTA

{% extends "scgeBundle::layout.html.twig" %}

{% block title %}Ingreso de Donaciones{% endblock %}
{% block metadesc %}Donaciones{% endblock %}
{% block pageid 'ponencias' %}

{% block contenido %}
 {{ app.session.flash('id') }}
<h2>Ingreso de Donaciones</h2>


{{ form_errors(form) }}

<form action="{{ path('ingreso') }}" method="post" {{ form_enctype(form) }}>
      <div class="grid_6 alpha">
   
   {{form_rest(form)}}
   
 </div> 
  <input type="submit" value="Grabar" />  
</form>


{% endblock %}

{% block lateral %}


{% endblock %}
  #2 (permalink)  
Antiguo 08/08/2012, 18:59
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: guardar los datos del usuario junto al Formulario

Que usuario es exactamente ?, el que esta logeado ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 08/08/2012, 19:25
 
Fecha de Ingreso: agosto-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: guardar los datos del usuario junto al Formulario

Si, el usuario Logueado, necesito luego guardarlo en la base de datos, te agrego las Entidades:

Código:
Entidad Usuario

namespace scge\scgeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

use scge\scgeBundle\Validator\RUT;
use scge\scgeBundle\Entity\Comuna;

/**
 * scge\scgeBundle\Entity
 *
 * @ORM\Table(name="usuarios")
 * @ORM\Entity
 */
class Usuario
{
 
    
   /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="IDENTITY")
    */
    protected $id;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    * @RUT()
    */
    protected $rut;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    */
    protected $serial_rut;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    * @Assert\MinLength(3)
    * @Assert\MaxLength(50)
    */
    protected $nombre;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    * @Assert\MinLength(3)
    * @Assert\MaxLength(50)
    */
    protected $apellidos;
    
   /**
    * @ORM\ManyToOne(targetEntity="Comuna", inversedBy="usuarios", cascade={"remove"})
    * @ORM\JoinColumn(name="comunas_id", referencedColumnName="id")
    */
    protected $comuna;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    */
    protected $direccion;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    */
    protected $fono;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    */
    protected $movil;

   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    * @Assert\MinLength(5)
    * @Assert\MaxLength(100)
    */
    protected $email;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    * @Assert\MinLength(5)
    * @Assert\MaxLength(10)
    */
    protected $password;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    * @Assert\MinLength(5)
    * @Assert\MaxLength(10)
    * @Assert\Choice({"ROLE_USER", "ROLE_ADMIN"})
    */
    protected $rol;
    
   /**
    * @ORM\Column(type="integer")
    */
    protected $gastolimite;
    
    /**
     * @ORM\Column(type="string", length="2")
     * @Assert\Choice({"si", "no"})
     */
    protected $bloqueado;
    
   /**
    * @ORM\OneToMany(targetEntity="Egreso", mappedBy="usuario")
    */
    protected $egreso;
    
   /**
    * @ORM\OneToMany(targetEntity="Ingreso", mappedBy="usuario")
    */
    protected $ingreso;
    
}
Código:
ENTIDAD INGRESO

<?php

namespace scge\scgeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;


/**
 * scge\scgeBundle\Entity
 *
 * @ORM\Table(name="ingresos")
 * @ORM\Entity
 */
class Ingreso
{
   /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="IDENTITY")
    */
    protected $id;
    
   /**
    * @ORM\Column(type="integer")
    */
    protected $numero;
 
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    */
    protected $RUT;
    
   /**
    * @ORM\Column(type="string")
    * @Assert\NotBlank()
    * @Assert\MinLength(3)
    * @Assert\MaxLength(70)
    */
    protected $nombre;
    
    
   /**
    * @ORM\Column(type="date")
    */
    protected $fecha;
    
   /**
    * @ORM\ManyToOne(targetEntity="TipoDoc", inversedBy="ingresos", cascade={"remove"})
    * @ORM\JoinColumn(name="tipodoc_id", referencedColumnName="id")
    */
    protected $tipodoc;   
    /**
     * @ORM\Column(type="text")
     */
    protected $glosa;
    
    /**
     * @ORM\Column(type="integer")
     */
    protected $Monto;
        
    /**
     * @ORM\Column(type="integer", length="1")
     */
    protected $nula;

    /**
     * @ORM\Column(type="integer", length="1")
     */
    protected $estado;
    
    
    /**
     * @ORM\ManyToOne(targetEntity="PlanCta", inversedBy="ingresos", cascade={"remove"})
     * @ORM\JoinColumn(name="plancta_id", referencedColumnName="id")
     */
    protected $ctacont;
    
    /**
     * @ORM\ManyToOne(targetEntity="Usuario", inversedBy="ingresos", cascade={"remove"})
     * @ORM\JoinColumn(name="usuario_id", referencedColumnName="id")
     */
    protected $usuario;
  #4 (permalink)  
Antiguo 08/08/2012, 20:24
 
Fecha de Ingreso: agosto-2012
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: guardar los datos del usuario junto al Formulario

Encontré la solución, por si alguien andaba buscando la información les pongo la solución:



$usuario = $this->get('security.context')->getToken()->getUser();
$ingasto->setUsuario($usuario);

Etiquetas: symfony2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:41.