Valor por defecto en formulario

1,099 views
Skip to first unread message

I. Gomez

unread,
Jan 24, 2010, 12:38:38 PM1/24/10
to symfony-es
Hola.

Estoy trabajando con un formulario en el cual entre otros campos tengo
el id_usuario pero ese campo en vez de ser introducido por el usuario
lo voy a coger de la variable sfGuardUser.
He probado a hacer multiples cosas pero no consigo enviar ese id de
usuario.

Ahora mismo tengo en las actions de mi formulario (es para hacer una
reserva) algo asi:

public function executeNew(sfWebRequest $request)
{
$this->form = new ReservaForm();
$user = $this->getUser()->getGuardUser()->getUsername();
$this->form->setDefault('idusuario',$user);
}

Aqui es donde se procesa el formulario

protected function processForm(sfWebRequest $request, sfForm $form)
{

$form->bind($request->getParameter($form->getName()));

if ($form->isValid())
{
$reserva = $form->save();
$this->redirect('reservas/previo?idreserva='.$reserva->getIdreserva
());
}

Y aqui está el formulario (lib/form/base)

$this->setWidgets(array(
'idreserva' => new sfWidgetFormInputHidden(),
'fecha' => new sfWidgetFormDate(array('format' => '%day% -
%month% - %year%', 'years' => $years_list)),
.......
'idusuario' => new sfWidgetFormInputHidden(),
));


Alguna idea de lo que puede ser??

Gracias.

Gaston Nina

unread,
Jan 24, 2010, 6:02:42 PM1/24/10
to symfo...@googlegroups.com
bueno yo lo manejo de 2 formas o en el fomulario en /
lib/form/
puedes poner en el configure un campo oculto y ahi ponerle por defecto tu valor

$this->setWidget('id_usuario', new sfWidgetFormInputHidden());
    $this->setDefault('id_usuario', sfContext::getInstance()->getUser()->getAttribute('usuario));//podrias rescatar de sfguard
    $this->setValidator('id_usuario', new sfValidatorPropelChoice(
                                    array('model' => 'sfGuardUser',
                                          'column' => 'id_user'),
                                    array('required'   => 'Hubo un error y no se pudo guardar el usuario')));

otra opcion es cuando guardes los campos es decir en el proccesForm


protected function processForm(sfWebRequest $request, sfForm $form)
    {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));

        if ($form->isValid())
        {

$reserva = $form->save();
$user = $this->getUser()->getGuardUser()->getUsername();
$revserva->setIdUsuario($user);
$reserva->save();
.....
}

bueno espero te haya servido de ayuda...

para mi la primera es mas facil asi no tocas las acciones

Livio López

unread,
Jan 24, 2010, 6:31:09 PM1/24/10
to symfony-es

saludos. la mejor forma de reailzarlo es en la classe de tabla dentro
del metodo save. y asi no tienes que llamarlo el solo se ejecuta la
guardar

class Tabla extends BaseTabla
{
public function save(Doctrine_Connection $conn = null)
{
$this->setId_usuario(sfContext::getInstance()->getUser()-
>getGuardUser()->getUsername();

return parent::save($conn);
}
}

I. Gomez

unread,
Jan 25, 2010, 10:22:39 AM1/25/10
to symfony-es
Al final use esta solución y me funciona perfecto :)

> protected function processForm(sfWebRequest $request, sfForm $form)
>     {
>         $form->bind($request->getParameter($form->getName()),
> $request->getFiles($form->getName()));
>         if ($form->isValid())
>         {
>
> $reserva = $form->save();
> $user = $this->getUser()->getGuardUser()->getUsername();
> $revserva->setIdUsuario($user);
> $reserva->save();
> .....
>
> }
>

Muchas gracias a los dos!!

Reply all
Reply to author
Forward
0 new messages