Czym jest serwis internetowy? Jest to zbiór formularzy oraz danych dodanych przy pomocy tych formularzy. Gdyby nie formularze, Internet taki jakim go znamy. Wyobrażacie sobie w jaki sposób dodawalibyście cokolwiek na ścianę facebooka bez formularzy?
W przypadku formularzy najczęstszym schematem jest ścieżka:
- strona początkowa (informacje na temat formularza lub dane zebrane przy jego pomocy)
- formularz (obsługa błędów, operacje na wprowadzonych danych)
- strona końcowa (podziękowania za wysłanie formularza lub powrót do strony początkowej).
Prawda, że nudne? Okazuje się, że wyrwanie się z tego schematu wcale nie jest takie trudne. Wystarczy formularz wyświetlić na warstwie, a dane zapisać AJAXem w tle. Oczywiście nie można zapomnieć o sytuacji kryzysowej, w której z jakiegoś powodu (np. błąd w skrypcie) zostaliśmy pozbawieni możliwości korzystania z Javascript.
Wszystko to, co przed chwilą opisałem można zrealizować niewielkim nakładem prac przy pomocy komponentu Zend_Form, biblioteki jQuery oraz pluginu FancyBox. Najciekawsze w tym wszystkim jest to, iż nie musimy wcale pisać dodatkowego kodu. Wszystkim zajmą się mechanizmy wbudowane w Zend Frameworka oraz konwencja, której trzeba się trzymać podczas stosowania tego sposobu.
Zacznijmy od formularza. Będzie to prosty formularz zbierający dane o użytkownikach (w przykładzie wykorzystałem klasę Batman_Form opisaną we wpisie Uniwersalne dekorowanie Zend_Form).
class Application_Form_FancyboxExample extends Batman_Form
{
protected function _renderForm()
{
$this->setName('form_fancybox_example');
$this->setAction('/index/fancyboxform');
$firstname = new Zend_Form_Element_Text('firstname');
$firstname->setLabel('Imie')
->setRequired(true)
->addValidator(new Zend_Validate_NotEmpty(), true);
$lastname = new Zend_Form_Element_Text('lastname');
$lastname->setLabel('Nazwisko')
->setRequired(true)
->addValidator(new Zend_Validate_NotEmpty(), true);
$submit = new Zend_Form_Element_Submit('btn_save');
$submit->setLabel('Zapisz')
->setIgnore(true);
$this->addElement($firstname);
$this->addElement($lastname);
$this->addElement($submit);
}
}
Kluczowym tutaj elementem jest zastosowanie akcji, która jednoznacznie wskazuje na akcję, odpowiedzialną za przetworzenie formularza. Ten prosty zabieg umożliwi nam obsłużenie formularza w przypadku braku Javascript.
Następnie musimy stworzyć widok, który będzie zawierał link do formularza.
<a href="/index/fancyboxform" id="link">dodaj uzytkownika</a>
Na koniec pozostaje stworzenie akcji
public function fancyboxformAction()
{
$form = new Application_Form_FancyboxExample();
if($this->_request->isPost()) {
$postData = $this->_request->getPost();
if($form->isValid($postData)) {
// zrob cos z danymi
$this->_redirect('/index/fancyboxexample');
}
}
$this->view->form = $form;
}
i widoku z formularzem.
<h1>Formularz</h1>
<?php echo $this->form; ?>
Jak dotąd nie zrobiliśmy nic ponad stworzenie standardowego, nudnego formularza wraz z jego obsługą. Pora na magię.
Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Zwiń
Czytaj na blogu autora...