Nov. 11, 2008

Symfony 1.1 Forms, czyli nowość w Symfony, na którą warto zwrócić uwagę.

Cudo o którym mowa bazuje na nowych klasach: sfForm oraz sfWidget

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

I… na tej podstawie budujemy nasz formularz!
$ php symfony generate:module frontend contact

Otrzymaliśmy nowy moduł: contact.

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

oraz widok:
<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>

Czyścimy cache, otwieramy contact/index. Pokaż żródło i widzimy elegancko wygenerowany kod.
DRY! Ku chwale obiektowości! :)

Co jeszcze ciekawego?
Dla uprzednio stworzonych pól możemy sobie zadefiniować na stałe etykiety, do tego wszystkiego - automatyczna ochrona przed atakami XSS.

Nie musimy także tracić za dużo czasu na walidację.

$this->setValidators(array(
 'name'    => new sfValidatorString(array('required' => false)),
 'email'   => new sfValidatorEmail(),
 'subject' => new sfValidatorChoice(array('choices' => array_keys(self::$subjects))),
 'message' => new sfValidatorString(array('min_length' => 4)),
));

Automatyczne walidatory! Bo przecież chodzi o to żeby programować jak najdokładniej ale i  oczywiście jak najszybciej!

Temat jest spory, chciałem tylko zwrócić na niego uwagę.
Zapraszam do źródła:

http://www.symfony-project.org/book/forms/1_1/en/

Enjoy :)

Napisał Dominik w kategoriach: O programowaniu

Musisz być zalogowany aby komentować