Klasa z formularzem
class Application_Form_CreateEvent extends Zend_Form {
public function init() {
$this->setMethod('post');
$this->setAttrib('id', 'create-event-form');
$this->setAttrib('class', 'form');
//elementy
$client_login = $this->createElement('select', 'client', array('label' => 'Wybierz klienta:')); $title = $this->createElement('text', 'title', array('label' => 'Tytuł:')); $desc = $this->createElement('textarea', 'desc', array('label' => 'Opis:')); $date = $this->createElement('text', 'date', array('label' => 'Data:')); $time = $this->createElement('text', 'time', array('label' => 'Godzina:'));
$login_input = $this->createElement('hidden', 'login_input');
$submit = $this->createElement('submit', 'submit', array('value' => 'Wyślij'));
//walidatory i filtry
$title->addValidator('stringLength', false, array(2
, 255
)); ....
//złożenie formularza
$this->addElement($client_login)
->addElement($title)
->addElement($date)
->addElement($time)
->addElement($desc)
->addElement($login_input)
->addElement($submit)
->addElement('hash', 'csrf', array('ignore' => true)); }
}
Akcja kontrolera uzupełniająca ten formularz o dodatkowe dane:
public function createAction() {
//ACL
$hasAccess = $this->_helper->aclHelper($this->_request->getControllerName(), $this->getRequest()->getActionName());
if(!$hasAccess['access']){
$this->view->message = $this->_helper->messageHelper('FORBIDDEN','RED');
$this->view->redirectPath = '/trainer/login';
return;
}
//login trenera
$login = $hasAccess['login'];
$this->createForm->setAction('/individevent/createform');
//uzupełnienie formularza o login trenera
$loginInput = $this->createForm->getElement('login_input');
$loginInput->setValue($login);
//uzupełnienie pola select o klientów
$select = $this->db->select()
->from('trainer_client', 'ClientLogin')
->where('TrainerLogin = ?', $login);
$stmt = $this->db->query($select);
$result = $stmt->fetchAll();
$clientSelect = $this->createForm->getElement('client');
$clientSelect->addMultiOption(null, 'Brak klienta');
foreach($result as $c) {
$clientSelect->addMultiOption($c['ClientLogin'], $c['ClientLogin']);
}
//przekazanie formularza do widoku
$this->view->createForm = $this->createForm;
}
Akcja kontrolera przetwarzająca dane z formularza:
public function createformAction() {
//sprawdzenie, czy nastąpiło przesłanie danych
if(!$this->_request->isPost()) {
$this->view->message = $this->_helper->messageHelper('POSTFAIL','RED');
$this->view->redirectPath = '/';
return;
}
//walidacja
if (!$this->createForm->isValid($this->_request->getPost())) {
echo 'client: '.$this->_request
->getPost('client').'</br>'; //wypisuje się prawidłowo wybrany klient $this->view->message = $this->_helper->messageHelper('VALIDATIONFAIL','RED');
$this->view->redirectPath = '/';
return;
}
//przedworzenie danych
//.......
}