Tworzenie formularza
Aby aplikacja księgi gości była użyteczna należy umieścić w niej formularz
umożliwiający dodawanie nowych wpisów.
W pierwszej kolejności należy utworzyć klasę formularza. Można to osiągnąć
poprzez polecenie:
Powyższe polecenie utworzy katalog application/forms/
zawierający plik Guestbook.php. Należy umieścić w
nim następującą treść:
setMethod('post');
// Dodanie elementu do wpisania adresu e-mail
$this->addElement('text', 'email', array(
'label' => 'Your email address:',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array(
'EmailAddress',
)
));
// Dodanie elementu do dodania komentarza
$this->addElement('textarea', 'comment', array(
'label' => 'Please Comment:',
'required' => true,
'validators' => array(
array('validator' => 'StringLength', 'options' => array(0, 20))
)
));
// Dodanie elementu captcha
$this->addElement('captcha', 'captcha', array(
'label' => 'Please enter the 5 letters displayed below:',
'required' => true,
'captcha' => array(
'captcha' => 'Figlet',
'wordLen' => 5,
'timeout' => 300
)
));
// Dodanie guzika do wysyłki
$this->addElement('submit', 'submit', array(
'ignore' => true,
'label' => 'Sign Guestbook',
));
// Dodanie zabezpieczenia przed CSRF
$this->addElement('hash', 'csrf', array(
'ignore' => true,
));
}
}
]]>
Powyższy formularz definiuje pięć elementów: pole adresu e-mail, pole
komentarza, pole CAPTCHA dla zabezpieczenia przed spamem,
przycisk wysłania komentarza oraz żeton bezpieczeństwa (przed CSRF).
Następnie należy zdefiniować nową akcję signAction()
w kontrolerze GuestbookController, która będzie
odpowiedzialna za odbiór danych wysłanych przez formularz. Aby utworzyć
nową akcję oraz związany z nią skrypt widoku należy uruchomić następujące
polecenie:
Jak widać z komunikatów, polecenie tworzy metodę signAction()
w kontrolerze oraz odpowiedni widok.
Teraz należy zapisać logikę aplikacji w treści nowej akcji. Na początek należy sprawdzić
czy żądanie zostało otrzymane metodą POST czy GET.
W drugim przypadku zostanie po prostu pokazany formularz do
wypełnienia. Jednak dla metody POST niezbędne będzie sprawdzenie
poprawności przesyłanych danych oraz w przypadku pozytywnej weryfikacji, utworzenie
nowego rekordu i zapisanie go w bazie danych. Logika może wyglądać następująco:
getRequest();
$form = new Application_Form_Guestbook();
if ($this->getRequest()->isPost()) {
if ($form->isValid($request->getPost())) {
$comment = new Application_Model_Guestbook($form->getValues());
$mapper = new Application_Model_GuestbookMapper();
$mapper->save($comment);
return $this->_helper->redirector('index');
}
}
$this->view->form = $form;
}
}
]]>
Niezbędna jest również zmiana skryptu widoku
application/views/scripts/guestbook/sign.phtml
tak aby zawierał następującą treść:
Please use the form below to sign our guestbook!
form->setAction($this->url());
echo $this->form;
]]>Lepszy wygląd formularzy
Tak powstały formularz nie stanowi wzoru piękna, ale należy pamiętać, iż wygląd
jest w pełni edytowalny. Więcej informacji można zasięgnąć w
rozdziale dotyczącym dekoratorów formularzy.
Dodatkowo przydatny może się okazać
samouczek tworzenia
dekoratorów formularzy.
Punkt kontrolny
Po wejściu pod adres "http://localhost/guestbook/sign" powinien się
pokazać formularz księgi gości: