# Drugie koty za płoty, z Zend Framework do roboty! ;)

Dodany dnia 01.06.2008 przez waXain

Trochę czasu minęło od poprzedniego artykułu. W tym czasie udało mi sie bliżej poznać i przyjrzeć możliwościom ZF. Podzielę się zatem z Wami kilkoma wrażeniami - zarówno tymi pozytywnymi jak i negatywnymi.
Pierwszą i chyba najważniejszą pozytywną cechą ZF jest fakt iż pisze się w nim wygodnie i szybko. Można naprawdę w krótkim czasie napisać np. prosty blog lub system prezentacji i zarządzania newsami. Nie wszystko jest jednak takie różowe - o czym później :)
W ZF spodobały mi się przede wszystkim:
- coś co nazwę modułowością, czyli możliwość wykorzystania dowolnej klasy ZF praktycznie w dowolnym miejscu kodu aplikacji bez obawy iż coś "spieprzymy" lub będzie to niezgodne z całą logiką frameworka. Każdy obiekt tworzonej klasy można zarejestrować by później móc się do niego swobodnie dostać,

- wysoka jakość i przejrzystość kodu ZF, naprawdę chylę czoła programistom którzy nad tym pracują - świetna robota! Świadczy o tym chociażby fakt, iż jeśli mam problem ze zrozumieniem działania czegokolwiek w ZF, wystarczy iż zekrnę do jego "wnętrza", odnajdę interesujący mnie fragment i dalej idzie już jak po maśle :)

- fakt, ZF nie jest w 100% obiektowym frameworkiem - i choć czytałem o kierowanych pod tym punktem zarzutach to z większością z nich nie zgadzam się, takie rozwiązanie daje właśnie pewną swobodę w pisaniu aplikacji której brakuje mi w wielu innych frameworkach.

- pisanie helperów, walidatorów, wszelkich innych rozszerzeń jest naprawdę proste,

- Zend_View, Zend_Layout, Zend_Form, Zend_Translate, Zend_Validate,Zend_Filter, Zend_Cache, Zend_Session, Zend_Db, Zend_Config i oczywiście Zend_Controller - na tych klasach najczęściej się pracuje i muszę przyznać iż nie miałem większych problemów (co nie znaczy, że żadnych) ze zrozumieniem ich działania oraz wdrożenia ich metod w życie ;)

Niestety, jak wszędzie są i minusy, do których muszę zaliczyć:
- zła dokumentacja! jeszcze raz...zła dokumentacja. Okej, może przesadzam - niekompletna, z wieloma błędami, przykłady zbyt proste (o czym pisałem już w poprzednim artykule), wyszukiwarka co ciekawszych haseł nie znajduje a jeśli już cos znajduje, to prezentacja wyników wyszukiwania pozostawia wiele do życzenia. Choć od poprzedniego mojego artukułu strona ZF została nieco wzbogacona, poprawiona i wizualnie wygląda bardziej "marketingowo" a dokumentacja wydaję się bogatsza, to nadal uważam ją za największe nieporozumienie całego przedsięwsięcia. Dlaczego tak mocno to podkreślam? Bo na dokumencji/przykładach chcę się uczyć, jeśli nie potrafię czegoś zrobić w ZF chcę znależć na to odpowiedź, a gdzie mam jej w pierwszej kolejności szukać jeśli nie w dokumentacji? Najczęściej moje poszukiwania kończą się na google i analizie lingwistycznej forów/blogów ZF w języku niemieckim, czeskim, rosyjskim... no i pozostaje analiza samego kodu ZF...ech,

- Zend_Controller_Router - mam wrażenie, ba - jestem pewien, że obsługa routingu w ZF nie jest jeszcze do końca dopracacowana, szczególnie Zend_Controller_Router_Regex gdzie często nawet z prostymi wyrażeniami regularnymi klasa sobie nie radzi,

- brak jednolitego modelu, który w ZF jest "zastąpiony" Zend_Db - co wydaje się dziwnym zabiegiem gdyż jak wiadomo często modelem dla aplikacji jest nie tylko baza danych... Przypuszczam, że team ZF doskonale sobie zdaje z tego sprawę i rozwiązanie problemu pozostawił programistom, co z jednej strony daje swobodę w pracy z ZF (co chwalę), z drugiej wydaje się być krokiem do tyłu w porównaniu z innymi frameworkami. Z takim rozwiązaniem wiąże się jeszcze jedna kwestia - walidacja i filtrowanie danych które wypadałoby umieścić po stronie modelu. Aby to dobrze zrobić, musiałem napisac rozszerzenie dla Zend_Db_Table i odpowiednio to wszystko zszyć ;) Chwilę trawało, wynik zadowolający,

- Zend_Validate i Zend_Filter_Input - napotkałem tu kilka błędów przy definiowaniu jednej wspólnej tablicy dla walidacji danych, niektóre z walidatorów (regex, stringlength) zaczęły się dziwnie zachowywać (Zend zaczął zgłaszać informację o złym typie danych) - niestety nie znalazłem nigdzie rozwiązania/przyczyn tego problemu a sam ominąłem go w dość wydaje mi się sprytny sposób ;) Dla wtajemniczonych proponuję wywołać taki oto kod (wszystko zgodnie z manualem, testowane na wersji 1.5.2):

$validators = array(
	'nick'=>array(
		array(
	    		new Zend_Validate_NotEmpty(),
		    	'breakChainOnFailure' => true,
		    ),
		    array(
		    	new Zend_Validate_Regex('/([A-Za-z0-9_]+?)$/'),
		    	'breakChainOnFailure' => false,
		    ),
		    array(
		    	new Zend_Validate_StringLength(6,20),
		    	'breakChainOnFailure' => false,
		    ),
		)
	);

$filters = array(
	'nick'=>array(	
		'StringTrim'
	),
	'*' => 'StripTags'
	);

$dane = array(
	'nick'=>'moj-nick'
);

$input = new Zend_Filter_Input($filters, $validators, $dane);

[dodano 2008-06-09]
Małe sprostowanie - forma zapisu tablicy $validators którą podałem powyżej jest niestety niewłaściwa (można ją nazwać moim pobożnym życzeniem). Przykład prawidłowej formy zapisu:
$validators = array(
       'nick' => array(
		new Netizens_Validate_Alnum(),
        	new Zend_Validate_Regex('/([A-Za-z0-9_]+?)$/'),
	        new Zend_Validate_StringLength(6,20),
        	'breakChainOnFailure' => true,
    )
);
Dodatkowo jak można doczytać na stronie Zenda:http://framework.zend.com/manual/en/zend.filter.input.htmlprzy takim "skrótowym" zapisie "breakChainOnFailure" nie zadziała osobno dla każdego z walidatorów tylko zbiorczo dla całego pola (tu "nick").Z jednej strony zwracam honor programistom Zenda, z drugiej jednak pytam - why?

Jest jeszcze trochę innych drobnych błędów lub niedociągnieć co wydaje się normalne przy założeniu iż ZF jest młodym frameworkiem i kilka zim minie zanim zostaną one poprawione, a możliwości ZF wzrosną. Obecnie jest całkiem nieźle :)
W następnym artykule nie będzie już oceniania/marudzenia a przejdę do konkretów ;)

Tagi: zend framework Zend_Validate Zend_Filter

# komentarze

Dodany dnia 02.06.2008 przez: wojtek | www: http://www.zymonik.pl

On ŻYJE!
 

x
  •  
* - pola wymagane