php developer & web designer
19 lut 2009
Użycie komponentu Zend_Form_Element_Captcha do generowania obrazków z kodem nie jest takie proste jak przedstawiono w dokumentacji frameworka.
Okazuje się, że najpierw musimy stworzyć obiekt Zend_Captcha_Image, który następnie podajemy jako parametr konstruktora Zend_Form_Element_Captcha.
// tworzymy obiekt Zend_Captcha_Image
$captchaImage = new Zend_Captcha_Image('captchaImg');
$captchaImage->setFont('...') // pełna ścieżka do czcionki, jaka ma zostać użyta
->setImgDir('...') // pełna ścieżka do katalogu gdzie ma zostać wygenerowany obrazek
->setWordlen(5) // ilość znaków w kodzie captcha
->setWidth(100) // szerokość obrazka
->setHeight(60) // wysokość obrazka
->generate();
// tworzymy właściwy element formularza
$captcha = new Zend_Form_Element_Captcha('captcha', array(
'captcha' => $captchaImage));
$captcha->setLabel('Przepisz kod z obrazka widoczny poniżej:');
W roli wyjaÅ›nienia: Zend_Captcha_Image generuje obrazek (PNG – stÄ…d wymagana jest włączona obsÅ‚uga rozszerzenia GD w PHP) i zapisuje w katalogu podanym w metodzie setImgDir(). DomyÅ›lnie jest to katalog ./images/captcha. Zend_Form_Element_Captcha natomiast wstawia do formularza elementy input oraz img ze Å›cieżkÄ… do tegoż obrazka.
Zend_Form, mimo że bardzo sÅ‚abo udokumentowany i toporny w konfiguracji, jest przydatnym elementem Zend Framework‘a. Niestety, domyÅ›lnie generuje znaczniki HTML a nie XHTML, co uniemożliwia walidacjÄ™ kodu strony.
Jest na to wyjście.
Wystarczy w pliku bootstrap.php dodać następującą definicję doctype:
$view = new Zend_View();
$view->setEncoding('UTF-8');
$view->doctype('XHTML1_TRANSITIONAL');
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
Metoda doctype (klasa Zend_View_Helper_Doctype) przyjmuje jedną z wartości:
DziÅ› postanowiÅ‚em umieÅ›cić w sieci wersjÄ™ beta mojego serwisu-portfolio – webit webdesign
Jak to z wersjami beta bywa, nie wszystko jest w 100% zgodne z zamierzonym celem – ważne, że aplikacja dziaÅ‚a i jest stabilna. Niestety napisana w Zend Framework 1.0.x i muszÄ™ poÅ›wiÄ™cić trochÄ™ czasu na przepisanie jej do wersji ZF1.5. Głównie chodzi mi o wykorzystanie Zend_Layout i Zend_Form.
Póki co wykorzystuję Zend_Auth, Zend_Search, Zend_Db, Zend_Mail, Zend_Filter i kilka innych komponentów najlepszego frameworka php
Rob Allen przedstawił wspaniały przykład wykorzystania Zend_Form do obsługi uploadowanych plików. Jak wiadomo, Zend_Form nie posiada obsługi pól typu file. Jest to skutkiem nadal trwających prac nad dodaniem takowej obsługi do komponentu odpowiedzialnego za formularze.
W artykule Rob przedstawia wÅ‚asnÄ… klasÄ™ rozszerzajÄ…cÄ… Zend_Form (klasa ma za zadanie stworzyć formularz). NastÄ™pnie przedstawiony zostaÅ‚ przykÅ‚ad napisania klasy odpowiedzialnego za element Form_Element_Input. Kolejnym krokiem byÅ‚o stworzenie klasy walidatora, gdzie znalazÅ‚a siÄ™ obsÅ‚uga błędów uploadu. W koÅ„cu zaprezentowany zostaÅ‚ kontroler, który “spina” wszystko w jednÄ… caÅ‚ość.
Artykuł wraz z przykładowymi kodami źródłowymi można znaleźć na stronie:
http://akrabat.com/2008/04/07/simple-zend_form-file-upload-example/
Najnowsze komentarze