La situación es la siguiente. Tenemos un formulario con cuatro campos, a saber: name, email, message, ip.

El campo ip será un campo oculto que se rellenará automáticamente con la IP del usuario que hizo la petición. El resto de campos serán inputs normales.

La pregunta es, ¿cómo defino el valor de la IP si no lo conozco hasta que no hay una petición? Muy sencillo.

class ContactForm extends sfForm
{
 
    public function configure()
    {
        $this->setWidgets(array(
            'name'    => new sfWidgetFormInput(),
            'email'   => new sfWidgetFormInput(),
            'ip'      => new sfWidgetFormInputHidden(),
            'message' => new sfWidgetFormTextarea()
        ));
 
        $this->widgetSchema->setNameFormat('apply_form[%s]');
 
    }
 
    public function setIP($ip)
    {
        $this->getWidget('ip')->setAttribute('value', $ip);
    }
}

La gracia está en crear un método que se encargue de darle un valor por defecto y que podamos llamar desde la acción. La forma de usarlo sería la siguiente

    $this->form = new ContactForm();
    $this->form->setIP($request->getHttpHeader ('addr','remote'));

Notar que el código para la clase del formulario no está completa. Faltarían los validadores para campo.


Compártelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Ping.fm
  • RSS
  • Twitter