.: HosiriS :.

Informatica e non solo

Come lavorare con i form in Symfony

Posted by hosiris su ottobre 22, 2010

In vari casi abbiamo visto come, in maniera del tutto automatica, Symfony potesse generare i form di inserimento e modifica per la gestione del modello.
Ma se volessimo comporre un form che ci permetta, ad esempio, di richiedere dei dati da un utente, che procedura dovremmo seguire?
Per questo scopo, cominceremo ad analizzare la classe sfForm. Iniziamo con il descrivere la classe ContactForm:

// lib/form/ContactForm.class.php
class ContactForm extends sfForm
{
  public function configure(){
    $this->setWidgets(array(
      'name' => new sfWidgetFormInputText(),
      'email' => new sfWidgetFormInputText(),
      'message' => new sfWidgetFormTextarea(),
    ));
  }
}

Adesso che la classe è pronta possiamo generare un modulo:

$ ./symfony generate:module frontend contact

Adesso dobbiamo modificare l’azione del modulo contact:

// apps/frontend/modules/contact/actions/actions.class.php
class contactActions extends sfActions
{
  public function executeIndex(){
    $this->form = new ContactForm();
  }
}

E per fare in modo che venga visualizzato il form, modifichiamo il template:

// apps/frontend/modules/contact/templates/indexSuccess.php
<form action="<?php echo url_for('contact/submit') ?>" method="post">
  <table>
    <?php echo $form ?>
    <tr>
      <td colspan="2">
        <input type="submit" />
      </td>
    </tr>
  </table>
</form>

Per vedere il risultato, portiamoci sulla pagina /frontend_dev.php/contact.
Se provate ad inserire i dati e premere submit, vedrete che non succederà niente; questo perchè non abbiamo definito una azione per il “submit”:

// apps/frontend/modules/contact/action/action.class.php
public function executeSubmit($request)
{
  $this->forward404Unless($request->isMethod('post'));
  $params = array(
    'name'    => $request->getParameter('name'),
    'email'   => $request->getParameter('email'),
    'message' => $request->getParameter('message'),
  );
  $this->redirect('contact/thankyou?'.http_build_query($params));
}
public function executeThankyou()
{
}
// apps/frontend/modules/contact/templates/thankyouSuccess.php
<ul>
  <li>Name:    <?php echo $sf_params->get('name') ?></li>
  <li>Email:   <?php echo $sf_params->get('email') ?></li>
  <li>Message: <?php echo $sf_params->get('message') ?></li>
</ul>

In questo modo dopo il submit apparirà una finestra che mostrerà le informazioni che sono state inserite.
Visto il nome del modulo si è capito che stiamo per creare una conct form. Il secondo passo sarà quello di inviare una mail con le informazioni inserite nel form.
Vi consiglio di dare un’occhiata alla sezione della validazione del form, che ci permette con poche linee di testo di essere sicuri che l’utente stia lavorando correttamente.

Buon divertimento

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: