Zend Framework PL
polska społecznośćKanały
137 wpisów w 5 kanałach
Nawigacja
Mateusz Kamiński
-
Zend Framework 1.11.8
Dodany: lipiec 11, 2011, 11:12am CEST przez matipl
Bardzo lubię wprowadzony w zeszłym roku Bug Hunt Days organizowany przez zespół ZF co miesiąc.Dzięki polowaniu na błędy 7 lipca ukazała się kolejna wersja Zend Framework. Tym razem naprawiono prawie 40 błędów w frameworku.
Czy jest sens być na bieżąco? Oczywiście, aktualizacje w ramach tej samej gałęzi są bardziej ważne, niż aktualizacja wersji głównej.
W Zend Framework 1.11.8 odkryto np. że nie zawsze poprawnie działa Zend_Session::regenerateId. Poprawiono również problem w Zend_Validate, który zwracał fałsz gdy adres e-mail kończył się kropką (mało spotykane przypadek, ale jednak).
-
Zend Framework 1.11.6
Dodany: maj 9, 2011, 9:40am CEST przez matipl
Przed weekendem zespół Zend Framework wydaÅ‚ kolejny zestaw Å‚at dla frameworka – 1.11.6 oraz kilka krytycznych z linii 1.10 (.9). Kolejny efekt polowania na błędy…Najpoważniejszy poprawiony błąd to błąd bezpieczeÅ„stwa, który dotyczy MySQL PDO w Zend_DB. Błąd pojawiÅ‚ siÄ™ wraz z PHP 5.3.6+ i umożliwiaÅ‚ SQL Injection poprzez przekazywanie dowolnych znaków do DSN (wiÄ™cej informacji).
Poza tym z ważniejszych problemów naprawiono:
- Zend_Config_Yaml (nie ignorowano komentarzy)
- błąd w routowaniu, gdy URL posiadał zakodowany slash
- helper Redirector posiadał hardkodowane parametry akcja/moduł/kontroler
- insert() nie zwracał last_insert_id w przypadku pustego istniejącego klucza w insert data
- uporano siÄ™ z brakami dot. IPv6 (np. w Zend_Validate_Hostname).
I wiele innych. W sumie w Zend Framework 1.11.6 naprawiono ponad 60 błędów. Dla ciekawskich pełny changelog.
-
Zend Framework ? obsługa wielu języków
Dodany: luty 8, 2011, 9:01am CET przez matipl
Wstępnie chciałem napisać o lokalizacji, aby zaprezentować Wam jak można wykorzystać application.ini zamiast tworzyć własne zasoby (resource). Ale z drugiej strony może nie każdy wie jakie to proste w dzisiejszych czasach zrobić serwis wielojęzyczny z tłumaczeniem nie tylko statycznych napisów, ale również nawigacji czy lokalizacją kwot.Do tłumaczeń korzystam z gettext (pliki .mo i .po). Moje pliki językowe znajdują się w project/languages i wygląda to tak:
matipl@host:~/project/languages$ ls en_GB.mo en_GB.po pl_PL.mo pl_PL.po
Gdy mamy stworzone własne tłumaczenia pora na skonfigurowanie zasobu translate w application.ini:
resources.translate.registry_key = "Zend_Translate" resources.translate.adapter = "gettext" resources.translate.content = APPLICATION_PATH "/../languages/" resources.translate.options.scan = "filename" resources.translate.disableNotices = false resources.translate.options.logUntranslated = false resources.translate.locale = "pl_PL"
W ten oto sposób możemy już korzystać z plików lokalizacyjnych opartych o Zend_Translate (skonfigurowany zasób znajduje siÄ™ w Zend_Registry::get(‘Zend_Translate’)). Niestety nie wie on z jakiej wersji jÄ™zykowej (pl czy en) chcemy skorzystać.
W tym celu stworzyłem plugin Zextend_Controller_Plugin_Locale, który pobiera wybrany (lub domyślny) język użytkownika i konfiguruje Zend_Translate. Dodatkowo mówimy widokowi i nawigacji, że ma się wspierać przez Zend_Translate z tym konkretnym językiem, który skonfigurowaliśmy.
class Zextend_Controller_Plugin_Locale extends Zend_Controller_Plugin_Abstract { public function routeShutdown(Zend_Controller_Request_Abstract $request) { $view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view'); $locale = new Zend_Locale(Zextend_Lang::getActiveLang()); Zend_Registry::set('Zend_Locale', $locale); $translate = Zend_Registry::get('Zend_Translate'); $translate->setLocale($locale); $view->getHelper('translate')->setTranslator($translate); $view->navigation()->setTranslator($translate); Zend_Form::setDefaultTranslator($translate); Zend_Registry::set('Zend_Translate', $translate); } }Na koniec wystarczy włączyć nasz plugin w application.ini:
resources.frontController.plugins.locale = "Zextend_Controller_Plugin_Locale"
Teraz możemy już swobodnie korzystać z tłumaczeń na naszej stronie, np. w widoku wywołując:
<h2><?php echo $this->translate('Contact') ?></h2>Dla sÅ‚owa „Contact” musimy mieć oczywiÅ›cie odpowiedni wpis w plikach *.po. Dla wersji PL:
msgid "Contact" msgstr "Kontakt"
Po stworzeniu tłumaczenia pamiętajmy o wygenerowaniu pliku .mo komendą: msgfmt -o pl_PL.mo pl_PL.po.
Na koniec dodam, że w danych czasach sporo rzeczy robiłem poza application.ini. Chociażby przeciążałem zasób Db, aby wprowadzić SET NAMES UTF8, czy też w index.php wpisywało się dyrektywy PHP. A obecnie?
resources.db.adapter = "pdo_mysql" resources.db.params.host = "db-1.project.pl" resources.db.params.username = "project" resource.db.params.password = 'password' resources.db.params.dbname = "project" resources.db.isDefaultTableAdapter = true resources.db.params.driver_options.1002 = "SET NAMES UTF8;" phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0
-
Zend Framework ? wersja mobilna
Dodany: luty 6, 2011, 1:26pm CET przez matipl
W październiku 2010 roku wspominałem Wam, że wraz z pojawieniem się Zend Frameworka w wersji 1.11.0 ułatwiono nam dostosowanie aplikacji opartej o ZF dla moblinych przeglądarek.Dzięki pomocy Raphaela w frameworku pojawiły się m.in. Zend_Http_UserAgent oraz Zend_View_Helper_UserAgent. Dzisiaj chciałbym szybko Wam pokazać jak w łatwy sposób wykryć czy mamy doczynienia z mobilną przeglądarką (zbliża się wersja bilancio dla mobilnych).
WURFL, czyli powtarzamy kroki z manualaZasób UserAgent korzysta z zewn. biblioteki – WURFL (Wireless Universal Resource File). ÅšciÄ…gamy wersjÄ™ 1.1 i rozpakowujemy w dowolnym miejscu. W naszej aplikacji tworzymy /library/wurfl-php-1.1 i kopiujemy tam katalog WURFL (reszty ze Å›ciÄ…gniÄ™tej paczki tutaj nie potrzebujemy).
Aby zakończyć ten krok musimy jeszcze skopiować plik z informacjami o urządzeniach mobilnych. Plik wurfl-latest.zip znajduje się w paczce, w ścieżce tests/resources/. Tworzymy katalog w naszej aplikacji /data/wurfl oraz /data/wurfl/cache (w tym miejscu będzie przechowywał zawartość pliku zip). Do /data/wurfl kopiujemy plik wurfl-latest.zip (kopiujemy również web_browsers_patch.xml). W skrócie (project to nazwa naszego projektu ZF):
wget "http://downloads.sourceforge.net/project/wurfl/WURFL%20PHP/1.1/wurfl-php-1.1.tar.gz?r=&ts=1296984042&use_mirror=sunet" -O wurfl-php-1.1.tar.gz tar -xvf wurfl-php-1.1.tar.gz mkdir project/library/wurfl-php-1.1 mkdir project/data mkdir project/data/wurfl mkdir project/data/wurfl/cache chmod a+w project/data/wurfl cp -R wurfl-php-1.1/WURFL project/library/wurfl-php-1.1/ cp wurfl-php-1.1/tests/resources/wurfl-latest.zip project/data/wurfl cp wurfl-php-1.1/tests/resources/web_browsers_patch.xml project/data/wurfl
Konfiguracja WURFLPliki mamy skopiowane, skonfigurujmy teraz samego WURFL. Zróbmy to wg tutorialu:
<?php $resourcesDir = dirname(__FILE__) . '/../../data/wurfl/'; $wurfl['main-file'] = $resourcesDir . 'wurfl-latest.zip'; $wurfl['patches'] = array($resourcesDir . 'web_browsers_patch.xml'); $persistence['provider'] = 'file'; $persistence['dir'] = $resourcesDir . '/cache/'; $cache['provider'] = null; $configuration['wurfl'] = $wurfl; $configuration['persistence'] = $persistence; $configuration['cache'] = $cache;
Konfiguracja chyba jest jasna? Wskazujemy głównie miejsca plików, które wcześniej kopiowaliśmy.
Na koniec konfiguracja projektu Zend Framework. Jak ostatnio wspominaÅ‚em we wpisie Zend Framework i Symfony – subiektywnie, obecnie jesteÅ›my w stanie zrobić wiÄ™kszość w application.ini. W takim razie dodajmy do niego informacjÄ™, że chcemy skorzystać z UserAgent i powiedzmy, gdzie umieÅ›ciliÅ›my WURFL, który jest odpowiedzialny za „rozszyfrowanie” danych o urzÄ…dzeniu mobilnym:
resources.useragent.wurflapi.wurfl_api_version = "1.1" resources.useragent.wurflapi.wurfl_lib_dir = APPLICATION_PATH "/../library/wurfl-php-1.1/WURFL/" resources.useragent.wurflapi.wurfl_config_file = APPLICATION_PATH "/configs/wurfl-config.php"
W tym momencie zasób UserAgent już działa i możemy z niego korzystać.
PluginNasza cała aplikacja ma uwzględniać urządzenia mobilne dlatego stworzymy plugin, który w przypadku wersji mobilnej zmieni nam layout na mobilny:
class Zextend_Controller_Plugin_Mobile extends Zend_Controller_Plugin_Abstract { public function routeShutdown(Zend_Controller_Request_Abstract $request) { $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap'); $userAgent = $bootstrap->getResource('useragent'); $device = $userAgent->getDevice(); if($device->getType() == 'mobile') { Zend_Layout::getMvcInstance()->setLayout('mobile'); } } }$device udostępnia nam nie tylko typ urządzenia (getType()), ale również jego szerokość ekranu (getPhysicalScreenWidth());
W bilancio będzie to po prostu przekierowanie na osobą domenę (pobierana z application.ini z app.mobileUrl), ponieważ udostępniona funkcjonalność będzie różnić się od standardowej wersji:class Zextend_Controller_Plugin_Mobile extends Zend_Controller_Plugin_Abstract { public function routeShutdown(Zend_Controller_Request_Abstract $request) { $config = Zend_Registry::get('config'); $bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap'); $userAgent = $bootstrap->getResource('useragent'); $device = $userAgent->getDevice(); $mobileUrl = $config->app->mobileUrl; if($mobileUrl && $device->getType() == 'mobile') { $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); $redirector->setGoToUrl($mobileUrl); $redirector->redirectAndExit(); } } }Zaznaczę, że dla obsułgi wurfl-latest.zip potrzebujemy rozszerzenia ZIP w PHP. Możemy plik rozpakować, ale wtedy nie skorzystamy z cachowania.
-
Symfony i Zend Framework ? subiektywnie
Dodany: luty 3, 2011, 10:05am CET przez matipl
Przed majem 2010 roku w świecie PHP poruszałem się głównie z pomocą Zend Frameworka. Kilka lat wcześniej był to autorski framework (netEngine) oraz firmowe frameworki. Z perspektywy czasu uważam, że złe było rozwijanie własnych narzędzi, zamiast pomóc społeczności. Taki zbiorowy projekt jest świetny:- bardzo szybko rozwijany
- zawsze znajdziesz osobę, która zna framework (a Twój lub firmowy?)
- spora baza tutoriali w Sieci
- popularny = groźny (wykryta dziura w Australii może spowodować ciężki tydzień w Twojej firmie)
Od maja pracujÄ™ głównie z wykorzystaniem Symfony (1.4). Z mojego punktu widzenia przedstawia on odmienne podejÅ›cie do sprawy. W Symfony da siÄ™ sporo rzeczy ustawić z góry, dobry cmd line, a mnóstwo mamy out of box. Ale rozwijanie Symfony o wÅ‚asne dodatki czy helpery nie jest przyjemnoÅ›ciÄ…. Symfony odbieram jak takiego WordPressa – sprawdza siÄ™, ale jego kod pozostawia wiele do życzenia (przeplatanie jÄ™zyka proceduralnego z obiektowym).
Najgorszy minus Symfony 1.4 ? Mimo, że jest długo na rynku i jest najnowszą stabilną wersją Sieć prawie o nim milczy poza oficjalną dokumentacją. Jeśli przyjdzie zmierzyć się Tobie z nietrywalnym problemem lepiej od razu przejrzeć kod źródłowy frameworka niż szukać w Google.
Od grudnia znów pracujÄ™ z Zend Framework, przy okazji projektu bilancio. Wrażenia ogólne – bosko, w koÅ„cu czujÄ™ siÄ™ jak w domu. Mam tyle obiektów ile dusza zapragnie. A Google bardzo jest pomocne. Najgorszy byÅ‚ poczÄ…tek przy powrocie z Symfony.
Nadal nie widzÄ™ dobrze opisanego application.ini w Sieci, a można obecnie przez niego pozbyć siÄ™ nadpisywania wiÄ™kszoÅ›ci zasobów (ach czasy ZF < 1.0). Dodatkowo wydaje mi siÄ™, że formularze w Symfony „szybciej mi szÅ‚y”. Chociaż irytujÄ…ce jest, że w wiÄ™kszoÅ›ci wypadków wypluwaÅ‚ inputy, zamiast peÅ‚nego tagu form (Å‚atwiej obudować w ZF jak siÄ™ potrafi). No i te magiczne url_for() w Symfony (w zależnoÅ›ci od parametru wywoÅ‚uje rózne inne funkcje).
Po pierwszym tygodniu pracy z Zend Framework nie chcę się z nim znów rozstawać, Symfony to naprawdę nieprzyjemne środowisko. A przy okazji projektów ZF może w końcu zacznę dzielić się jakimiś drobnostkami z Wami. Zobaczymy czy czas pozwoli (jak widać po blogu tutejszym ostatnio mi go brak).
PS: Przed wczoraj został opublikowany Zend Framework w wersji 1.11.3 (30 załatanych dziur).
-
Zend Framework 1.11.1 i WordPress 3.0.2
Dodany: grudzieñ 1, 2010, 8:09am CET przez matipl
No proszÄ™, mimo czarnego listopada w Polsce na sam koniec miesiÄ…ca ukazaÅ‚a siÄ™ poÅ‚atana wersja Zend Frameworka oraz WordPressa.Wczoraj wieczorem ukazaÅ‚a siÄ™ wersja Zend Framework 1.11.1 (changelog) zawierajÄ…ca wyłącznie Å‚aty na znalezione błędy – łącznie 80. Nowa wersja ZF rozwiÄ…zuje m.in. problem z routingiem, poprawia obsÅ‚ugÄ™ YAML, włącza obsÅ‚ugÄ™ memcached w Zend_Cache_Backend.
Tego samego polskiego wieczoru ukazaÅ‚a sie poprawiona wersja WordPressa z linii 3.0 – WordPress 3.0.2. Tak jak w ZF skupiono siÄ™ tutaj wyłącznie na Å‚ataniu znalezionych błędów. W sumie poprawiono 10 błędów (lista zmian), w tym dość ważny – poprawienie problemu zabezpieczeÅ„, w przypadku gdy użytkownik z poziomem Autor mógÅ‚ zdobyć dostÄ™p do serwisu. Obecnie nie ma jeszcze aktualizacji dla polskiej wersji.
Wszystkim dotychczasowym użytkownikom ZF 1.11 oraz WordPress 3.0 zalecam aktualizację.
Aktualizacja (3 grudnia 2010)W Sieci pojawiÅ‚y siÄ™ już pierwsze opisy jak wykorzystać dziurÄ™ w WordPress, gdy posiadamy tylko uprawnienia autora – WordPress: Information Disclosure via SQL Injection Attack
-
Zend Framework 1.11.0 już jest!
Dodany: listopad 3, 2010, 7:43am CET przez matipl
Bardzo szybko moje zapowiedzi z października się ziściły. Oto wczoraj wieczorem zespół Zend Frameworka wydał finalną wersję 1.11.0.Jak pisałem już wcześniej głowną nowością jest obsługa urządzeń mobilnych przez ZF. Jest to tak naprawdę przymiarka do tego co będziemy mogli osiągnąć (alternatywne szablony, obrazki itp.).
W ekipie ZF pojawiło się wiele świeżości dzięki nowym osobom. I tak oto stworzono Zend_Cloud odpowiedzialne za obsługę SimpleCloud API (wsparcie dla Amazona i Windows Azure).
Jak wspominałem w październiku w tej wersji skupiono się bardzo na bezpieczeństwie. Naprawiono wiele miejsc z możliwymi dziurami do wykorzystania (np. za pomocą Remote Timing Attack).
Do tego dodano obsługę Dojo, SimpleDB, eBay Findings API.
W oficjalnej wersji zawarto również obsługę dodatkowych formatów konfiguracyjnych: Yaml i JSON. Programiści Zend Framework mają w wersji 1.11 morze możliwości do wykorzystania. I to jest piękne.
Download: Zend Framework 1.11.0
-
Zend Framework 1.11 krok w przyszłość
Dodany: pa¼dziernik 15, 2010, 12:13pm CEST przez matipl
Kto by przypuszczał, że Zend Framework 1.11 wniesie tyle świeżości.Wczoraj została udostępniona jako wersja BETA1 i robi spore wrażenie.
Wsparcie dla wersji mobilnych (Mobile Support)Prawdziwa rewolucja. Zend Framework 1.11 posiada wsparcie dla urzÄ…dzeÅ„ mobilnych. Wszystko za sprawÄ… Raphael Carles (CTO Interakting), który napisaÅ‚ Zend_Http_UserAgent. Nowy komponent ma za zadanie wykryć User-Agent’a oraz na tej podstawie sprawdzić możliwoÅ›ci urzÄ…dzenia mobilnego. W Å‚atwy sposób można dopisać backendy dla kolejnych urzÄ…dzeÅ„.
Dzięki wtyczce dla Zend_Application oraz Zend_View_Helper_UserAgent w łatwy sposób możemy dostosować generowane dane wyjściowe z uwzględnieniem urządzenia, dla którego serwujemy tą treść (różne layouty, obrazki itp.).
Zend_Cloud: SimpleCloud APIPodczas ZendCon 2009 ogłoszono prototyp SimpleCloud API. W tej wersji mamy pierwsze oficjalne wsparcie od strony Zend Frameworka zawarte w Zend_Cloud. Dzięki temu możemy w chmurze korzystać z:
- Document Services (Amazon SimpleDB i Windows Azure’s Table Storage)
- Queue Services (Amazon Simple Queue Service, Windows Azure’s Queue Service, Zend_Queue)
- Storage Services (S3, Windows Azure’s Blog Storage, Nirvanix, lokalny system plików).
W ten prosty sposób możemy przenośić swoje dane pomiedzy różnymi adapterami. W ciągu kilku miesięcy powinny pojawić się kolejne adaptery.
Podziękowania dla: Wil Sinclair and Stas Malyshev, którzy zainicjowali Zend_Cloud
SimpleDB Support
Od teraz ZF ma wsparcie dla Simple Storage Service (S3), Simple Queue Service (SQS), oraz Elastic Cloud Compute (EC2). Jest wprowadzona obsługa wszystkich operacji na SimpleDB poprzez Zend_Service_Amazon_SimpleDb.
Podziękowania dla: Wil Sinclair
eBay Findings API SupporteBay od dawna posiada rozbudowane REST API pozwalające programistom tworzenie interakcyjnych aplikacji z dużą ilością danych. Nowy Zend Framework (1.11) zawiera Zend_Service_Ebay_Findings, które w pełni obsługuje eBay Findings API. Pozwala to na tworzenie zapytań przez programistów dot. szczegółów aukcji eBay z uwzględnieniem kategorii i słów kluczowych.
Podziękowania dla: Renan de Lima i Ramon Henrique Ornelas
Obsługa nowych formatów konfiguracjiOd samego początku konfiguracja Zend Framework oparta jest o Zend_Config oferującego adaptery: tablic PHP, XML, INI. Od teraz do tej listy należy dodać: YAML i JSON. Wow!
Yaml jest bardzo popularnym formatem konfiguracyjnym w frameworku Symfony. Od osoby przyzwyczajone do Yaml’i nie muszÄ… siÄ™ z nim żegnać podczas migracji na ZF.
Tak jak wcześniejsze adaptery, tak też Zend_Config_Yaml i Zend_Config_Json pozwalają na zapisywanie konfiguracji.
Podziękowania dla: Stas Malyshev (przy Zend_Config_Json pomagał również Sudheer Satyanarayana)
Skracacze URL-iW tej wersji dodano również komponent Zend_Service_ShortUrl. Dzięki temu możemy skorzystać z zewnętrznych serwisów skracających linki.
W tym momencie posiada wsparcie dla [jdem.cz] oraz http://tinyurl.com.Podziękowania dla: Martin Hujer
DodatkowoPoza tym w Zend Framework 1.11:
- bezpieczeństwo: załatano kilka klas, które były narażone na wycieki informacji
- wsparcie dla Dojo zaktualizowane do wersji 1.5.0
- dodano helper widoku Zend_View_Helper_Gravatar, dzięki któremu możemy korzystać z avatarów przypisanych do użytkowników w serwisie Gravatar (dzięki Marcinie)
Pozostaje nam tylko czekać na oficjalne wydanie. A ci którzy mają więcej wolnego czasu proszę o testy i zgłaszanie błędów. Pomożecie nam wszystkim.
-
Zend Framework 1.10.7
Dodany: sierpieñ 2, 2010, 8:42am CEST przez matipl
Bardzo mi odpowiada to regularne i częste wydawanie kolejnych wersji Zend Frameworka.
Dzięki temu mamy potwierdzenie, że ZF się rozwija i społeczności zależy na poprawianiu jego funkcjonalności.Co przynosi nam piątkowe wydanie ZF 1.10.7? Ponad 60 załatanych błędów. Ciekawsze poprawki tej wersji:
- Zend_Db_Adapter_Pdo_Pgsql (lastInsertId)
- Zend_Db_Table_Rowset_Abstract akceptował niepoprawne indeksy
- nieskończona pętla w StripTags
- Powiększenie funkcjonalności dla Google Apps -> Groups (Email Lists)
- Metoda removePrefixPath w Zend_Loader_PluginLoader.php usuwała ścieżkę z kluczem 0
- poprawki w Zend_Log::_constructFilterFromConfig()
- Popsuta implementacja S3_Stream
- problem z iconv_set_encoding() –> Zend_Service_Flickr
- Zend_Translate – poprawienie zarzÄ…dzanie cachem
Download: Zend Framework 1.10.7
Zend Framework 1.11.0A przed nami kolejna duża wersja ZF – 1.11. Powinna ukazać siÄ™ pod koniec wrzeÅ›nia 2010. Poza poprawieniem stabilnoÅ›ci (wszelkie 1.10.X), kilka aktualizacji, normalizacjÄ™ tÅ‚umaczeÅ„ tekstów w walidatorach i kilka nowoÅ›ci.
Lada dzień zostanie wydany 1. milestone developerski ZF 2.0. Będzie już zmigrowany na przestrzenie nazw z PHP 5.3.
-
Zend Framework coraz stabilniejsze ? 1.10.5
Dodany: maj 27, 2010, 9:52am CEST przez matipl
W miniony weekend zakończyła się kolejna akcja The Bug Hunt Days w ramach projektu Zend Framework.Jest to fantastyczna, spontaniczna akcja wśród programistów PHP. Tym razem zapaleńcy zamknęli 60 błędów. Obecnie linia 1.10 wygląda bardzo stabilnie.
Poprawiono m.in. Zend_Date::_getLocalizedToken, Zend_Paginator (problem z cachowaniem),  Zend_Filter_StripTags, Zend_Db_Table_Row_Abstract, Zend_Form_Element_Radio i wiele innych.
Pełna lista zmian.Download: Zend Framework 1.10.5
-
Zend Framework 1.10.4
Dodany: kwiecieñ 29, 2010, 8:04am CEST przez matipl
Kwiecień programiści PHP korzystający z Zend Framework będą mile wspominać.Na początku miesiąca przywitaliśmy wersję 1.10.3, a kończymy miesiąc z wersją 1.10.4. Najnowszą wersje, podobnie jak 1.10.2, zawdzięczamy Bug Hunt Days organizowanemu przez społeczność Zend Framework od kilku miesięcy.
Tym razem naprawiono aż 50 błędów. Dzięki poprawkom linia 1.10 stała się bezpieczniejsza i stabilniejsza.
Koordynator akcji Matthew Weier O’Phinney zwraca uwagÄ™ na 3, najważniejsze jego zdaniem poprawki:- ZF-7493 – istotna poprawa w wydajnoÅ›ci serializacji Zend_Amf (wzrost szybkoÅ›ci do 200-300% w dużych zbiorach)
- ZF-9263 – poprawka w Zend_Loader::isReadable() (eliminacja wiÄ™kszoÅ›ci ostrzeżeÅ„ przy Å‚adowaniu strony i wtyczek pod platformami Windows)
- ZF-9504 –  bardziej wydajne generowanie wartoÅ›ci w Zend_XmlRpc_Value
Download: Zend Framework 1.10.4
-
Zend Framework 1.10.3
Dodany: kwiecieñ 2, 2010, 8:48pm CEST przez matipl
Cóż za świąteczny prezent.
1 kwietnia opublikowano kolejną wersję Zend Frameworka. Tak szybkie kolejne wydanie spowodowane było wykryciem błędu bezpieczeństwa w Dojo Toolkit.
Z tego powodu pojawiła się wersja 1.9.8 oraz 1.10.3.W gałęzi 1.10 poza poprawieniem wspomnianego błędu naprawiono 80 zgłoszonych błędów. W większości są to drobne poprawki nie wpływające na funkcjonowanie całego frameworka.
Poza tak błahymi zmianami jak dodanie opisów metod lub literówki, poprawki znalazły się w:
Zend_Currency, Zend_Validate_CreditCard, Zend_Validate_EmailAddress, Zend_Validate_Float/Int, Zend_File_Transfer, a także usprawnienia w Zend_Validate_Sitemap_*Zapraszam do zapoznania się z pełną lista zmian.
Download: Zend Framework 1.10.3
-
Zend Framework: SQLSTATE[HY000] [2002] Invalid argument
Dodany: marzec 10, 2010, 9:25am CET przez matipl
Tym razem krótko i banalnie, ale może komuś się przyda.
Kilka dni temu po ręcznej instalacji PHP 5.3.2 na jednej z maszyn z Debianem i podpięciu aplikacji opartej o Zend Framework jedyne co było widać to strona błędu z wpisem w logach serwisu:SQLSTATE[HY000] [2002] Invalid argument
Super, konkretny komunikat :/ A jakże, nie ma jak PHP
Na poczÄ…tku pomyÅ›laÅ‚em, że to może wina wersji (aktualizacja php 5.2 -> 5.3) – nie, to nie byÅ‚o to.RozwiÄ…zanie okazaÅ‚o siÄ™ banalne. Wspomniany błąd generuje PDO, a jest wynikiem błędnie okreÅ›lonej lokalizacji socketu MySQL przez PHP podczas kompilacji (czÄ™sto PHP uważa, że to /tmp/mysql.sock – ?).
Wystarczy dodać w naszym php.ini informację o lokalizacji:; najpierw sprawdź, gdzie jest Twój mysql.sock pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
Może i bezpośrednio Zend Frameworka nie dotyczy, lecz PHP+PDO. Ale jeśli już da się złapać taki wyjątek, to Zend Framework powinien go zamienić na coś konkretnego.
-
Zend Framework 1.10.2
Dodany: luty 25, 2010, 9:43am CET przez matipl
Zespół Zend Frameworka załatał kolejne 50 błędów i tym samym wydał wersję ZF 1.10.2Akcja została przeprowadzona w minionym tygodniu w ramach kolejnego Bug Hunt Days mająca na celu poprawę stabilności frameworka.
Nie są to krytyczne błędy, ale niektóre bardzo uciążliwe w specyficznych sytuacjach. Poprawki, na które warto zwrócić uwagę:
- obsługa IDN dla .EU w Zend_Validate_Hostname
- fetchRow() ignorował limit offset
- problem z komunikatem błędu w Zend_Validate_PostCode
- opcja „mx” byÅ‚a ignorowana w Zend_Validate_EmailAddress
- Zend_Validate_File_isImage obsługuje teraz wszystkie typy obrazków
- Zend_XmlRpc_Value_Double zaokrąglał do 6 miejsc po przecinku
Zapraszam do aktualizacji i zobaczenia innych poprawek w wersji 1.10.2.
Download: Zend Framework 1.10.2 Full
-
Zend Framework 1.10.0 wydane
Dodany: styczeñ 28, 2010, 9:00am CET przez matipl
Wczoraj odbyÅ‚a siÄ™ nie tylko premiera nowego produktu Apple (iPad), ale również Zend w koÅ„cu zamknÄ…Å‚ kolejnÄ… wersjÄ™ swojego frameworka dla PHP – ZF w wersji 1.10.0.ListÄ™ nowoÅ›ci opisaÅ‚em przy okazji ukazania siÄ™ wersji beta 1, dlatego nie bÄ™dÄ™ tego powtarzaÅ‚. Dodatkowo zmieniona zostaÅ‚a strona pobraÅ„ – teraz jeszcze bardziej zachÄ™ca siÄ™ nas do skorzystania z Zend Server.
Aktualizacji nie ominęła dokumentacji projektu. Wprowadzono w końcu jasny podział na poszczególne wersje. Wprowadzono sekcję Learning Zend Framework oraz naniesiono poprawki w Reference Guide.
Download: ZF 1.10.0
-
Zend Framework na hostingu współdzielonym
Dodany: styczeñ 26, 2010, 1:04pm CET przez matipl
Większość ofert hostingowych w Polsce od zawsze udostępnia nam jeden katalog, ew. możliwość wskazania dla danej domeny katalogu gdzie przechowujemy nasz projekt.
Dzięki temu wystarczy do niego wgrać aplikację i wszystko działa.
Kiedyś nie stanowiło to problemu, gdy cała aplikacja była w jednym worku, a za pomocą odpowiednich sztuczek nie pozwalało się na bezpośredni dostęp do plików źródłowych PHP lub konfiguracyjnych.Obecnie, np. z punktu widzenia osoby tworzącej z wykorzystaniem Zend Framework stanowi to problem, ponieważ domyślny układ projektu wygląda tak:
application/ controllers/ views/ scripts/ library/ public/ tests/Ze wzglÄ™dów m.in. bezpieczeÅ„stwa w ZF jest wydzielony jeden katalog publiczny (public), który jest domyÅ›lnym katalogiem dostÄ™pnym z Sieci. Gdy takÄ… aplikacjÄ™ umieÅ›cimy np. na hostingu w home.pl aplikacja nam siÄ™ nie uruchomi, a każda osoba z Internetu bÄ™dzie miaÅ‚a dostÄ™p do wszystkich plików (pliki PHP nie stanowiÄ… problemu, ale już pliki INI, SQL tak). Wiele osób przegrywa plik index.php do katalogu nadrzÄ™dnego odpowiednio go modyfikujÄ…c – to błąd. Owszem, aplikacja zadziaÅ‚a, ale nie poprawi to wzglÄ™dów bezpieczeÅ„stwa.
Problem można bardzo łatwo rozwiązać jeśli nasz usługodawca daje możliwość umieszczania plików .htaccess:
RewriteEngine On RewriteRule ^\.htaccess$ - [F] RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /public/index.php [NC,L] RewriteCond %{REQUEST_URI} !^/public/.*$ RewriteRule ^(.*)$ /public/$1 RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L] RewriteRule ^public/.*$ /public/index.php [NC,L]Wystarczy go umieścić w katalogu głównym, a on załatwi już odpowiednie przekierowania poszczególnych wywołań.
Oczywiście jeśli mamy możliwość konfiguracji vhost-ów lub ustawienia katalogu aplikacji w inny sposób powinniśmy z niego skorzystać, zamiast cudować z htaccess. -
PHP APC ? czy warto korzystać z opcode caching?
Dodany: styczeñ 22, 2010, 8:49am CET przez matipl
Dawno na blogu nie pisaÅ‚em nic o optymalizacji – postanowiÅ‚em odÅ›wieżyć temat.
Obecnie bardzo wiele osób korzystających z PHP używa do tego standardowego zestawu LAMP (Linux + Apache + MySQL + PHP) i dla nich będzie ten wpis.W używaniu LAMP nie ma w tym nic złego. I nie zamierzam nikomu kazać zmieniać przyzwyczajeń lub uczyć się nowego oprogramowania. Za to pokażę jak łatwo można zmniejszyć zużycie zasobów naszej maszyny (szczególnie pamięci RAM) korzystając z opcode caching, czyli tzw. akceleratorów do PHP.
Jednym z rodziny opcode caching jest APC, gdzie o sposobie jego używania już Wam pisałem. Dzisiaj chciałbym pokazać Wam, że w wypadku gdy korzystamy z frameworka powinniśmy zawsze korzystać z APC. W moim przykładzie oprę się o wyniki dla Zend Frameworka.
Postawiłem LAMP w oparciu o aktualną wersję Debiana. Stworzyłem za pomocą Zend_Tool pustą aplikację w oparciu o ZF.
W bazie stworzyłem jedną pustą tabelę user z polem id i name. W IndexController::indexAction w prosty sposób z niej skorzystałem i dodałem prostą metodę zliczającą zajętość pamięci w taki oto sposób:public function indexAction() { $start = $this->_memoryUsage(); $userModel = new Model_User(); //klasa dziedzicząca po Zend_Db_Table $this->view->start = $start; $this->view->users = $userModel->fetchAll(); $this->view->end = $this->_memoryUsage(); } protected function _memoryUsage() { $mem_usage = memory_get_usage(true); $usage = ''; if ($mem_usage < 1024) $usage = $mem_usage . ' bytes'; elseif ($mem_usage < 1048576) $usage = round($mem_usage/1024,2) . ' kilobytes'; else $usage = round($mem_usage/1048576,2) . ' megabytes'; return $usage; }Przy braku korzystania z APC na mojej maszynie developerskiej uzyskałem wynik:
MEM start: 5.5 megabytes MEM end: 6 megabytes
Wynika z tego, że skorzystanie z ZF wymaga 5.5 MB, i użycie dodatku w postaci Zend_DB zjada dodatkowo 0.5 MB RAM. Czy to dużo?
Aplikacja, która korzysta ze średniej ilości dodatków ZF w postaci helperów, bazy, formularzy, validatorów zużywa już około 30 MB pamięciPo tym gdy aktywowałem APC, w taki sposób jak opisywałem we wcześniejszych postach zużycie dla całej naszej aplikacji spada 3-krotnie:
MEM start: 1.75 megabytes MEM end: 2 megabytes
Dla wspomnianej Å›redniej aplikacji ZF owe zużycie również spada trzykrotnie do okoÅ‚o 10 MB. Jest to bardzo duży zysk. W naszym przypadku zauważcie, że posÅ‚ugujemy siÄ™ „jednÄ… instancjÄ… aplikacji”.
PodsumowujÄ…c – warto – oszczÄ™dzamy pamięć, jak również mamy zysk na czasie wykonywania siÄ™ aplikacji.
Każdy framework ma to do siebie, że jest zbudowany z wielu klocków (duża zaleta), ale wiąże się to również z dużą ilością plików do przeczytania i wykonania (w przypadku PHP) co opcode caching jest w stanie bardzo przyspieszyć. -
Zend Framework 1.10.0beta1
Dodany: styczeñ 15, 2010, 4:49pm CET przez matipl
Koniec piątku przywitał nas pojawieniem się wersji beta frameworka PHP.
Niecały miesiąc po ukazaniu się wersji alpha możemy w pełni przetestować możliwości, które przyniesienie wersja Zend Frameworka 1.10, dlaczego? Ponieważ wydanie wersji beta oznacza, że w API frameworka nie dojdzie już do żadnych zmian i lista nowości jest już zamknięta. O nowościach już pisałem, ale powtórzmy dla potomnych co pojawi się w wersji 1.10.0:- Zend_Barcode
- cache: Zend_Cache_Backend_Static, Zend_Cache_Manager
- feed: Zend_Feed_Pubsubhubbub, Zend_Feed_Writer
- filtry: Zend_Filter_Boolean, Zend_Filter_Compress/Decompress, Zend_Filter_Null
- logi: Zend_Log::factory(), Zend_Log_Writer_ZendMonitor
- Zend_Markup
- Zend_Oauth
- Zend_Serializer
- usługi: Zend_Service_DeveloperGarden, Zend_Service_LiveDocx, Zend_Service_WindowsAzure
- walidatory: Zend_Validate_Barcode, Zend_Validate_Callback, Zend_Validate_CreditCard, Zend_Validate_PostCode
- dodatkowe zasoby w Zend_Application zawierajÄ…ce m.in. Cachemanager, Dojo, Jquery, Layout, Log, Mail, and Multidb
- dokonano refactoringu Zend_Loader::loadClass() (m.in. obsługa namespaców przy autoloadingu)
Nie będę tłumaczył co dane klasy robią, ponieważ są bardzo logicznie nazwane (no z jednym wyjątkiem, o którym pisałem). Dodatkowo przepisano Zend_Tool rozszerzając o nowe funkcje tj.
- nowy CLI runner z obsługą katalogu domowego i konfiguracji
- nowi dostawcy: generowanie modeli(!), ustawienia dla DbAdapter, generator layoutów i formularzy(!)
- domyślny projekt będzie posiadał wsparcie dla logowania błędów z poziomu ErrorController
20 stycznia ukaże się wersja RC1, a 26 stycznia ujrzymy pełną wersją 1.10.0!
Download: Zend Framework 1.10.0 Beta 1 Full
-
Zend Framework 1.9.7 z łatami bezpieczeństwa!
Dodany: styczeñ 12, 2010, 11:05am CET przez matipl
Wczoraj ukazaÅ‚y siÄ™ aż 3 wersje popularnego frameworka PHP – Zend Framework.
Stała się rzecz niespotykana, bo ruszono wersje starsze od bieżącej i w gałęziach 1.8 i 1.7 pojawiły się również aktualizacje (1.8.5, i 1.7.9). Powodem jest poprawienie 6 błędów bezpieczeństwa, które zostały usunięte:- możliwy atak XSS lub wstrzyknięcie HTML w Zend_Json
- możliwy atak XSS w Zend_Service_ReCaptcha_MailHide
- możliwe wstrzyknięcie MIME-type w Zend_File_Transfer
- możliwy atak XSS w Zend_Filter_StripTags, gdy komentarze są dozwolone
- możliwy atak XSS w Zend_Dojo_View_Helper_Editor
- możliwy atak XSS ze względu na niezgodne kodowanie
Autorzy proszę wszystkich o jak najszybsze aktualizacje. W sumie poprawiono ponad 40 błędów. Tym samym powinna to być już ostatnia wersja przed ukazaniem się ZF 1.10.
Download: Zend Framework
-
Zend Framework 1.10 już w styczniu 2010
Dodany: grudzieñ 22, 2009, 10:50am CET przez matipl
Ekipa programistów Zend Framework ogłosiła, że już 21 stycznia 2010 roku możemy spodziewać się ZF 1.10.
Jestem dość zdziwiony kolejnym release przed wydaniem ZF 2.0, którego wydanie planowane jest na wiosnę 2010. Mimo wszystko każdy zainteresowany może w domowym zaciszu przetestować nowości w wersji alfa 1.10, w której mamy następujące nowości w pakietach:- Zend_Barcode wraz z Zend_Validate_Barcode
- Zend_Cache_Backend_Static
- Zend_Cache_Manager
- Zend_Feed_Pubsubhubbub
- Zend_Feed_Writer
- Zend_Filter_Compress/Decompress
- Zend_Filter_Null
- Zend_Log::factory() oraz Zend_Log_Writer_ZendMonitor
- Zend_Markup
- Zend_Service_LiveDocx
- Zend_Service_WindowsAzure
- Zend_Validate_Callback
- Zend_Validate_CreditCard
- Zend_Validate_PostCode
Duży refactoring przeszedł również Zend_Tool, w którym dodano:
- nowy CLI runner z obsługą katalogu domowego i konfiguracji
- nowy dostawcy dla generatora modeli, konfiguracji DbAdapter, layoutów oraz generatora formularzy
- domyślna struktura projektu teraz obsługuje logowanie błędów z ErrorController
W takim razie zapraszam do ściągnięcia źródeł i zobaczenia zmian.
Download: Zend Framework 1.10.0 ALPHA
-
Zend Framework: w 2 dni zamknięto 103 zgłoszenia
Dodany: wrzesieñ 23, 2009, 8:36am CEST przez matipl
Takiego wyczynu projekt Zend Framework jeszcze nie widziaÅ‚! W miniony czwartek i piÄ…tek (17/18 wrzeÅ›nia) zamkniÄ™to aż 103 sprawy z bug trackera.Potrzebowano rÄ…k do pracy, szczególnie do zamykania zgÅ‚oszeÅ„ błędów, które błędami nie byÅ‚y. W tym celu od wrzeÅ›nia w każdy trzeci czwartek i piÄ…tek miesiÄ…ca organizowana bÄ™dzie impreza pod hasÅ‚em “Bug Hunt Days”.
Wynikiem zeszłotygodniowego zamykania zgłoszeń ukazała się nowa wersja Zend Framework oznaczona numerem 1.9.3. Wersja zawiera oczywiście wyłącznie poprawki zgłoszonych wcześniej błędów (niektóre to np. wyłącznie literówki w przykładach) z ponad 40 różnych komponentów.
-
Zend Framework Tips&Trick: DbProfiler
Dodany: wrzesieñ 18, 2009, 12:04pm CEST przez matipl
Rozmawiając ostatnio z ludźmi z branży (np. podczas interview), którzy zarzekają się, że znają i korzystają z Zend Framework okazuje się, że ich wiedza kończy się często na etapie wklepywania kodu do kontrolera.Dlatego postanowiłem, że różnymi banalnymi, ale użytecznymi rzeczami z ZF będę dzielił się z Wami na moim blogu.
Wczoraj chciałem zoptymalizować bazę i musiałem zobaczyć dokładne zapytania SQL, które idą do bazy zewn. i ich czasy wykonywania.
Z samymi zapytaniami może nie byÅ‚oby problemu dla poczÄ…tkujÄ…cego programisty z wykorzystaniem ZF – wystarczy jakieÅ› wyplucie obiektów Zend_Db_Select na ekran, ale czasy trwania ?Z pomocÄ… przychodzi nam pakiet Zend_Db_Profiler. Aby nie Å›miecić sobie na ekranie aplikacji, polecam zainstalować FirePHP dla Firefoksa, wtedy możemy skorzystać z Zend_Db_Profiler_Firebug i w wyniki przeglÄ…dać w konsoli Firebug’a. Poniżej przedstawiam wtyczkÄ™:
class Zextend_Controller_Plugin_DbProfiler extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $profiler = new Zend_Db_Profiler_Firebug('DB - All Queries'); $profiler->setEnabled(true); $db->setProfiler($profiler); } }Następnie wystarczy w pliku konfiguracyjnym naszej aplikacji (configs/application.ini) włączyć działanie wtyczki:
resources.frontController.plugins.dbProfiler = "Zextend_Controller_Plugin_DbProfiler"
Od tego momentu w Firebugu zobaczymy wszystkie zapytania SQL, które idą do bazy wraz z ich parametrami i czasami wykonywania.

wynik w Firebug
-
ZendFramework i PHPUnit
Dodany: wrzesieñ 2, 2009, 1:54pm CEST przez matipl
Aktualna wersja Zend Framework wspomaga tworzenie testów jednostkowych. Wykorzystuje do tego znaną paczkę PHPUnit dostępną w repozytorium PEAR.Obecnie po utworzeniu naszego projektu opartego o ZF (zf create project nazwa_projektu) i po dodaniu automagicznie nowych kontrolerów (zf create controller nazwa_kontrolera) tworzone są automatycznie puste klasy testujące w katalogu /tests.
Dlaczego warto korzystać z testów jednostkowych?UnitTesty automatyzują nam testowanie aplikacji. Dzięki nim jesteśmy w stanie natychmiast wychwycić błąd z innych części systemu, gdzie takie błędy nie powinny się pojawiać.
Przygotowanie środowiska
Pomagają również kontrolować postęp tworzenia aplikacji, na zasadzie najpierw unitTest, poźniej implementacja, gdzie takie podejście jest używane w eXtreme Programming. Korzystając z unitTestów możemy stworzyć odpowiednie narzędzia monitorujące dany system na podstawie wyników z testów jednostkowych.Aby móc skorzystać z przyjemności tworzenia testów jednostkowych najpierw musimy zainstalować paczkę PHPUnit.
- Najpierw zaktualizujmy na wszelki wypadek dotychczasowe pakiety PEAR’a:
$pear upgrade-all
- Dodajemy nowy kanał dla PEAR:
$pear channel-discover pear.phpunit.de
- I instalujemy PHPUnit z zależnościami
$pear install --alldeps phpunit/PHPUnit
Jeśli wszystko poszło bez problemów możemy do korzystania z PHPUnit zwiększyć dostępną pamięć dla PHP w pliku ini zmieniając wartość memory_limit na przynajmniej 64M.
Teraz już możemy przejść do samych testów. Do tego celu posłużymy się przykładowym kontrolerem.
- Tworzymy kontroler Kontakt:
zf create controller kontakt
- Nasza hierarchia katalogów w skrócie wygląda teraz tak:
`-- application |-- configs `-- controllers |-- KontaktController.php |-- library |-- public `--tests `-- application `-- controllers |-- KontaktControllerTest.php |-- bootstrap.php |-- library |-- phpunit.xml
- Powinniśmy skonfigurować bootstrap do celów testowych, edytujemy /tests/application/bootstrap.php:
set_include_path(implode(PATH_SEPARATOR, array( realpath(dirname(__FILE__) . '/../../library'), get_include_path(), ))); defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application')); defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'testing'); defined('APPLICATION_LOAD_TESTDATA') || define('APPLICATION_LOAD_TESTDATA', true); require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); spl_autoload_unregister(array($autoloader, 'autoload')); Zend_Loader_Autoloader::resetInstance(); $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('PHPUnit_'); - Pozostało nam już tylko zedytować klasę KontaktControllerTest, aby korzystało z naszego bootstrapa, i dopisania prostego testu. Po zmianach powinna klasa wyglądać tak:
class KontaktControllerTest extends Zend_Test_PHPUnit_ControllerTestCase { public function setUp() { $application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini'); $this->bootstrap = array($application->getBootstrap(), 'bootstrap'); return parent::setUp(); } public function tearDown() { /* Tear Down Routine */ } public function testIndexAction() { $this->dispatch('/kontakt'); $this->assertController('kontakt'); $this->assertAction('index'); } } - Aby nie musieć każdej klasy wywoływać osobno, możemy skonfigurować odpowiednie phpUnit. Przykładowy plik konfiguracyjny /tests/phpunit.xml może wyglądać tak:
<phpunit bootstrap="./application/bootstrap.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" stopOnFailure="false"> <testsuite name="Test_ZF"> <directory>./application/</directory> </testsuite> </phpunit>
Powstała klasę testującą możemy już uruchomić. Umieściłem przykładowy test (testIndexAction) sprawdzający czy znajdujemy się we właściwej lokalizacji. W tym celu udajemy się do /tests i wydajemy polecenie:
$phpunit --configuration phpunit.xml PHPUnit 3.3.17 by Sebastian Bergmann. Time: 0 seconds OK (1 test, 2 assertions)
Dzięki skorzystaniu z pliku konfiguracyjnego xml, nie będziemy musieli dokonywać żadnych modyfikacji podczas dodawania kolejnych klas testujących. Docelowo, można przygotować stronę, która przedstawi nam graficznie jakie klasy działają już prawidłowo.
Możliwości porównań pakietu Zend_Test / PHPUnit możemy znaleźć w dokumentacji.
Mam nadziejÄ™, ze to maÅ‚e wprowadzenie poszerzy grono programistów korzystajÄ…cych z Zend Framework do używania testów jednostkowych, tak bardzo przydatnych przy wiÄ™kszych aplikacjach. - Najpierw zaktualizujmy na wszelki wypadek dotychczasowe pakiety PEAR’a:
-
ZF: instalacja & tworzenie nowego projektu
Dodany: sierpieñ 25, 2009, 2:56pm CEST przez matipl
Ile razy tworzyłeś nowy projekt na bazie Zend Frameworka? W moim wypadku odpowiedź brzmi: wiele razy.
Za każdym razem zastanawianie siÄ™ co skopiować, jakie podstawowa wersje plików zostawić, no i trzeba od nowa stworzyć hierarchiÄ™ katalogów.Do tej brudnej roboty mamy od wersji Zend Framework 1.8 pomocnika – Zend_Tool i trochÄ™ zmienione podejÅ›cie co do bibliotek ZF.
Aktualnie (w Zend Server w standardzie) zaleca się posiadanie jednych źródeł Zend Framework na maszynę, a nie jak było wcześniej kopiowaliśmy te kilkanaście MB do każdego projektu. Dostosujmy naszą maszynę developerską do pracy z jedną wersją ZF. Poniżej w bardzo skróconej wersji przedstawię Wam jak zainstalować ZF i stworzyć jedną linijką poleceń cały nowy projekt oparty o Zend Framework.Najpierw musimy sprawdzić, jaki include_path posiada nasz PHP:
matipl@hobbiton:~$ php -i | grep include_path include_path => .:/usr/share/php:/usr/share/pear => .:/usr/share/php:/usr/share/pear
Jeśli powyższe polecenie (php -i) nie działa, musimy zainstalować konsolowego klienta PHP (często paczka php-cli).
Widzimy powyżej, że PHP przetrzymuje ładowane pliki w /usr/share/php. Ściągamy aktualna wersję ZF i rozpakowujemy z niej katalog library/Zend do /usr/share/php/Zend. Fanstatycznie, możesz teraz pozbyć się z każdego projektu osobnej kopii ZF.Następnym krokiem jest sprawienie, aby automagiczny skrypt Zend Frameworka działał nam z konsoli.
W moim wypadku (Debian) posiadam katalog /usr/lib/php5, gdzie skopiowałem z paczki ZF 2 pliki:- bin/zf.php
- bin/zf.sh
AbyÅ›my mogli posÅ‚ugiwać siÄ™ skryptem “zf” bez podawania zbÄ™dnej Å›cieżki gdzie siÄ™ znajduje musimy stworzyć link symboliczny:
ln -s /usr/lib/php5/zf.sh /usr/bin/zf
Teraz w dowolnym miejscu naszego systemu bÄ™dziemy mogli posÅ‚ugiwać siÄ™ poleceniem “zf”, tworzÄ…c np. nowy projekt. Ale najpierw sprawdźmy czy wszystko dziaÅ‚a poleceniem sprawdzajÄ…cym wersjÄ™ Zend Framework:
matipl@hobbiton:~$ zf show version Zend Framework Version: 1.9.1
Jeśli widzimy powyższy komunikat (ew. z inną wersją) to wszystko działa i możemy przejść do stworzenia naszego projektu. Posługujemy się do tego naszym skryptem:
matipl@hobbiton:/home/services/httpd/_dev.matipl.pl$ zf create project test Creating project at /home/services/httpd/_dev.matipl.pl/test
Tak oto stworzyliśmy w pełni funkcjonalny projekt oparty o Zend Framework. Możemy do niego w jednej shella linijce dodać np. nowy kontroler wraz z potrzebnym widokiem:
matipl@hobbiton:/$ cd test.dev.matipl.pl matipl@hobbiton:/test.dev.matipl.pl$ zf create controller contact Creating a controller at /test.dev.matipl.pl/application/controllers/ContactController.php Creating an index action method in controller contact Creating a view script for the index action method at /test.dev.matipl.pl/application/views/scripts/contact/index.phtml Creating a controller test file at /test.dev.matipl.pl/tests/application/controllers/ContactControllerTest.php Updating project profile '/test.dev.matipl.pl/.zfproject.xml'
W ten oto sposób mamy stworzoną podstronę Contact i możemy od razu sprawdzić czy działa wchodząc na nasza-maszyna.com/contact
Dostępne polecenia zf: create [view,controller,action,module].
Osobiście na razie korzystam tylko z automatycznego tworzenia nowego projektu, jakoś nie mogę się przekonać do korzystania z konsolki do rozbudowy projektu. -
ZendFramework 1.9
Dodany: sierpieñ 6, 2009, 2:22pm CEST przez matipl
Z końcem lipca Zend udostępnił kolejną wersję swojego frameworku dla PHP.Od wersji 1.8 wydanej w maju poprawiono ponad 700 błędów. Nie wiem czy się z tego powodu cieszyć, bo bardziej mnie zastanawia czemu wersja z taką ilością błędów ujrzała światło dzienne jako wersja stabilna?
Ale poza naprawianiem starych klas dodano kilka nowości w stosunku do wersji 1.8.4, które może zwykłych programistów nie zainteresują, ale warto to odnotować:
- Zend_Rest_Route, Zend_Rest_Controller (warstwa MVC dla serwisów REST)
- Zend_Feed_Reader (API dla feedów RSS/Atom)
- Zend_Db_Adapter_Sqlsrv (adapter DB dla MS SQL Server)
- Zend_Test_PHPUnit_Db (możliwość testowania zapytań SQL z poziomu PHPUnit)
- Zend_Log_Writer_Syslog (logowanie od dziennika systemowego)
- Zend_View_Helper_BaseUrl (helper zwracajÄ…cy URL bazowy aplikacji)
- Zend_Date (dodanie obsługi rozszerzenia DateTime)
Moim zdaniem powinni się skupić na większej ilości helperów i innych wspomagaczy, aby można było spokojnie używać Zend Framework, jak np. eZ.
Download: Zend Framework 1.9
-
ZF: Zend_Navigation
Dodany: maj 27, 2009, 8:43am CEST przez matipl
Jako, że w Zend Framework 1.8 pojawiÅ‚ siÄ™ nowy komponent do generowania menu, map stron itp. – Zend_Navigation chciaÅ‚em z niego skorzystać w aktualnym projekcie, aby nie wynajdować koÅ‚a od nowa.Ale w przypadku ZF nie jest to takie proste. Prawie wszystko co nowe w frameworku jest marginalnie opisany w dokumentacji. A nawet jeÅ›li lepiej to brak wiążących przykÅ‚adów (kontroler – widok – helper). Porozrzucane itp. Wciąż wierzÄ™, że kiedyÅ› dokumentacja ZF osiÄ…gnie taki poziom jak ezComponents, gdzie opanowanie komponentu Graph zajęło mi kilka minut.
A wystarczyło wszystko zawrzeć w 6 prostych krokach. Ostatecznie menu zawarłem w pliku navigation.xml, mały wycinek:
<?xml version="1.0" encoding="UTF-8"?> <config> <nav> <home> <label>Strona główna</label> <controller>index</controller> </home> <issue> <label>Sprawy</label> <controller> issue </controller> </issue> </nav> </config>Tak samo jak <controller/> możemy dodatkowo podać akcję, która ma się wykonać. Ewentualnie możemy podać gotowy link jako <uri/>.
Następnie wystarczy zrobić zasób dla nawigacji:class Zextend_Application_Resource_Navigation extends Zend_Application_Resource_ResourceAbstract { public function init() { $config = new Zend_Config_Xml ( APPLICATION_PATH . '/configs/navigation.xml', 'nav' ); $container = new Zend_Navigation($config); Zend_Registry::set('Zend_Navigation', $container); return $container; } }Zamiast podawać $config możemy wstawić gotową tablicę phpową, ale przez to zrobiłby się bałagan i trudny dostęp, gdybyśmy chcieli coś zmieniać. W naszym magicznym pliku application.ini dodajemy poniższą linijkę celem ładowania nowego zasobu:
resources.navigation = "array()"
Dodatkowo w zasobie Acl powiązałem role z menu, dzięki temu nie mamy linków, do których brakuje nam dostępu. Robi się to następująco, u mnie w Zextend_Application_Resource_Acl:
Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl); Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole('guest');PozostaÅ‚o nam już tylko wyÅ›wietlenie naszego menu w widoku/layoucie. Odpowiedni helper automagicznie zaÅ‚aduje sobie nasz rejestr nazwany ’Zend_Navigation’:
<?php echo $this->navigation()->menu()->renderMenu(); ?>
W ten sposób wygenerujemy następujący kod:
<ul class="navigation"> <li class="active"><a href="http://matipl.pl/">Strona główna</a></li> <li><a href="http://matipl.pl/issue">Sprawy</a></li> </ul>
Finito
Można byÅ‚oby zrobić samo generowanie ACL i nawigacji bez zabawy z XML, ale przy aktualnym projekcie jest mi to zbÄ™dne. W moich delicjach można znaleźć: Zend Framework: Documentation – Navigation i Navigation Helper. -
ZendFramework 1.8 już poprawiony
Dodany: maj 14, 2009, 12:30pm CEST przez matipl
Raptem 13 dni po ukazaniu siÄ™ wersji 1.8 Zend Frameworka zostaÅ‚a opublikowana kolejna wersja – 1.8.1.
W tym czasie udało się naprawić 68 zgłoszeń! Najważniejsze poprawki:- zmieniona wersja Dojo w ZF (1.2 na 1.3)
- Zend_Loader::registerAutoload() jako alias do Zend_Loader_Autoloader
- poprawki w Zend_Application
- generowanie modułów i elementów wewnątrz modułów (Zend_Tool)
- usprawnienia do Zend_AmfÂ
Wydaje się, że Zend powoli przystosowuje się do rynku i wypuszcza nowe wersje bez dogłębnych testów przerzucając tę czynność na zwykłych użytkowników!
Download: Zend Framework 1.8.1
-
Zend Framework 1.8 PREVIEW
Dodany: kwiecieñ 28, 2009, 1:17pm CEST przez matipl
W Zend Framework 1.8 szykuje się niemała rewolucja.Widać, że praca w zespole wrze oraz czerpią co najlepsze z innych frameworków.
Bardzo podoba mi się stworzenie Zend_Tool dzięki, któremu łatwo utworzymy nowy projekt , kontroler, model (prawie jak w Grails). Najważniejsze rzeczy, które dojdą:Dodatkowo w 1.8 usprawniono:
- Zend_Validate
- Zend_Filter
- Zend_Search_Lucene
- Zend_Pdf
Dla zainteresowanych mały tutorial o Zend_Tool.
-
Zend Framework 1.7 dostępny
Dodany: listopad 18, 2008, 10:52am CET przez matipl
Po dÅ‚ugim czekaniu ukazaÅ‚a siÄ™ kolejna wersja frameworka dla php – Zend Framework oznaczona wersjÄ… 1.7.
Poza połataniem dziur, doszło wiele nowości:- Zend_Amf z obsługą protokołów AMF0 oraz AMF3
- wsparcie dla edytora dijit w Dojo Toolkit
- Zend_Service_Twitter (dostęp do usług Twittera)
- ZendX_JQuery w dodatkowych bibliotekach (extras)
- metadata API w Zend_Cache
- Google Book Search API w Zend_Gdata
- obsługa Open Office XML w indeksie Zend_Search_Lucene
- poprawiona wydajność w Zend_Loader, Zend_Controller oraz komponentach serwerowych
- Zend_Tool w inkubatorze
- Zend_Text_Table (formatowanie tabel przy użyciu tekstu)
- Zend_ProgressBar (paski postępu w konsoli)
- Zend_Config_Writer (możliwość edycji plików konfiguracyjnych)
- ZendX_Console_Unix_Process w dodatkowych bibliotekach (extras)
- globalne parametry dla routingu
- obsługa formularzowego MAX_FILES_SIZE w File Transfer
- adapter Zend_Db_Table_Select dla Zend_Paginator
Źródło: Zend Framework 1.7.0 is now available
-
Zend Framework 1.6 już jest
Dodany: wrzesieñ 9, 2008, 5:31pm CEST przez matipl
Dopiero co pod koniec lipca pisałem o wydaniu wersji RC1 Zend Frameworka 1.6, a tutaj 2 września oficjalna wersja ujrzała światło dzienne. Czego dokonano, co dodano:- Zend_Tool (generowanie projektu)
- Lucene 2.3 Index File Format Support
- Zend_Session save handler for Database Tables
- Paginator Component
- Figlet Support (ASCII art ?)
- ReCaptcha Service
- Captcha Form Element
- Zend_Config_Xml Attribute Support
- Zend_File_Transfer Component
- File Upload Form Element
- Zend_Wildfire Component with FireBug Log Writer
Poza tym zamknięto 287 ticketów oraz udostępniono dokumentację ZF w formacie PDF.
Prezentacja nowości w ZF 1.6Źródło: Zend Developer Zone
-
ZendFramework 1.6 w drodze?
Dodany: lipiec 23, 2008, 8:14am CEST przez matipl
22 lipca ukazaÅ‚a siÄ™ wersja 1.6 RC1 znanego frameworka dla PHP – Zend Framework.
W 1.6 bardzo wiele nowości, m.in.:- obsługa sesji w oparciu o bazę danych
- API do obsługi reCaptcha
- obsługa dla SOAP (klient, serwer, WSDL Generation)
- obsługa kodowania bazy danych (obsługa Character Set w DB Adapter)
- Zend File Transfer (komponent do obsługi uploadu, w przyszłości downloadu)
- Paginator Component (obsługa paginacji)
- nowe helpery widoku (Flash, Quicktime, Object, and Page)
- Lucene w wersji 2.3
- integracja z Dojo (JavaScript toolkit)
Idzie ku dobremu…
-
Zend Studio ?Neon? Beta
Dodany: sierpieñ 13, 2007, 7:58am CEST przez matipl
W trakcie weekendu dostałem informację o powstaniu nowej bety Zend Studio. Roboczo nazywa się "Neon" i jak na razie jest prywatną wersją beta.Nowy Zend Studio (pytanie czy tak nadal się będzie nazywać) bazowany jest na platformie Eclipse i PDT.
Najważniejsze rzeczy dot. nowego projektu:- bazowanie na Eclipse/PDT
- miliony użytkowników i tysiÄ…ce developerów
- dostęp do setek wtyczek
- podÅ›wietlanie znaczników, okienka pomocy dot. kodu
- podstawowy debugging php
- dodatki bazowane na Zend Studio
- prosty w użyciu, zintegrowany, zaawnsowany debugging (lokalny i zdalny)
- refactoring kodu
- profiler i Code Coverage
- obsÅ‚uga PHPUnit Testów
- integracja z Zend Framework
- integracja z BIRT
- edycja WYSIWYG dla HTML-a
- integracja z Zend Platform
- narzÄ™dzia do migracji użytkowników z Zend Studio
Pozostaje tylko czekać na wersję ostateczną.
- bazowanie na Eclipse/PDT
-
Zend Framework 1.0 w końcu
Dodany: lipiec 18, 2007, 12:17pm CEST przez matipl
Rok pracy i mamy efekt – Zend Framework 1.0. Premiera, która przeszÅ‚a prawie bez echa w Internecie.
Najważniejsze w tym wydarzeniu jest to, że API nie będzie (mniejmy nadzieję) się zmieniać, a tylko rozbudowywać.
W niedługiej przyszłości ma się pojawić obsługa formularzy i layoutu. Poczekamy, zobaczymy. -
Szybkie porównanie frameworków dla PHP
Dodany: lipiec 18, 2007, 12:06pm CEST przez matipl
WÅ‚aÅ›nie natknÄ…Å‚em siÄ™ w Sieci na porównanie najpopularniejszych frameworków dla PHP, m.in ZF, Prado, CakePHP, Symfony. Warto przestudiować tabelkÄ™ przed dokonaniem wyboru na podstawie sÅ‚uchu.Aktualizacja:
Dane w tabeli są już dość stare (patrzac na daty komentarzy z 2006 roku), np. ZF posiada już moduły od Auth i ORM -
Polska społeczność ZF
Dodany: kwiecieñ 1, 2007, 12:37pm CEST przez matipl
Marzec był miesiącem dość owocnym. Poza wydaniem nowej wersji ZendFramework, to w ostatnich dniach powstała polska społeczność ZendFramework.
W skład portalu wchodzi: planeta
, blog oraz forum. Gdzie blog i forum dopiero raczkujÄ…, to na samej planecie jest już dość sporo powiÄ…zanych artykuÅ‚ów na temat tego frameworka.Co do stworzenia planety i bloga nie mam zastrzeżeÅ„. Fajnie, że wszystkie informacje bÄ™dÄ… dostÄ™pne w jednym miejscu, a blog-a powinien mieć każdy portal jako miejsce informacji o zmianach i opiniach (takie moje zdanie). Ale co do forum to zÅ‚y pomysÅ‚. Przez to polscy programiÅ›ci PHP srasznie siÄ™ rozdrabniajÄ…. Istnieje od kilku lat forum PHP i dobrze sprawuje swojÄ… rolÄ™. A tak trzeba skakać od forum do forum. Bez sensu…
-
Zend Framework 1.0 wkrótce
Dodany: kwiecieñ 1, 2007, 12:15pm CEST przez matipl
W marcu ukazaÅ‚a siÄ™ wersja Zend Framework 0.9.0 (pod sam koniec miesiÄ™ca ukazałą siÄ™ 0.9.1 nie wnoszÄ…ca za dużo nowego). Zawiera ona już wszystkie funkcjonalnoÅ›ci, które bÄ™dÄ… w wersji finalnej 1.0.
Samo API 1.0 nie powinno już ulec wiÄ™kszym zmianom, wiÄ™c można spokojnie zacząć zapoznawać siÄ™ z frameworkiem. Obecnie prace trwajÄ… nad wyeliminowaniem błędów z kodu oraz dopieszczaniem dokumentacji.Mimo tak wysokiej wersji ZF wciąż brakuje wrÄ™cz podstawowej funkcjonalnoÅ›ci. MówiÄ™ o Å‚atwym tworzeniu formularzy i ich obsÅ‚udze jak to ma miejsce w paczce PEAR: HTML_QuickForm2.
Niestety osoby, które korzystaÅ‚y do tej pory z Zend_Filter_Input nie bÄ™dÄ… zadowoleni, ponieważ ta klasa zniknęła w wersji 0.9.0. Zamiast niej mamy dostÄ™p do Zend_Filter oraz Zend_Validate, ale niektórych adekwatnych metod z Zend_Filter_Input brakuje. WiÄ™c migracja na nowÄ… wersjÄ™ może nie być taka Å‚atwa.KolejnÄ… dość ważnÄ… zmianÄ… jest rozbicie klasy Zend na:
- Zend_Debug
- Zend_Loader
- Zend_Registry
- Zend_Version
Mam nadziejÄ™, że w kwietniu bÄ™dÄ™ mógÅ‚ przedstawić bardziej praktyczne infomacje, ponieważ w firmie planujemy testowÄ… przesiadkÄ™ na ZF.
Na podstawie Zend Framework Beta
-
Zend Framework 0.7
Dodany: styczeñ 20, 2007, 12:05pm CET przez matipl
18 stycznia ukazała się kolejna wersja ZendFramework oznaczona numerem 0.7.0. Kodu coraz więcej i funkcjonalności też.
W nowej wersji wprowadzono gÅ‚ównie klasy do obsÅ‚ugi lokalizacji oraz internacjinalizacji. I w koÅ„cu ktoÅ› porzÄ…dnie wziÄ…Å‚ siÄ™ za polskÄ… dokumentacjÄ™.Lista zmian (wybrane pozycje):
- Komponent do zarzÄ…dzania lokalizacjami (L10N)
- komponent do obsługi daty i czasu z uwzględnieniem lokalizacji
- komponent do obsługi tłumaczeń (I18N) (w inkubatorze)
- komponent do obsługi jednostek i ich konwersji
- nowa prototypowa klasa do obsługi filtrowania i walidacji (w inkubatorze)
- nowa klasa do zarządzania użyciem pamięci w aplikacjach PHP (w inkubatorze)
- usprawnienia w komponentach: MVC, Session, Gdata, HTTP Client, Search, XmlRpc
-
Zend Framework i logowanie zdarzeń
Dodany: pa¼dziernik 4, 2006, 2:27pm CEST przez matipl
Na phpArchitect pojawił się ciekawy artykuł opisujący samą zasadę logowania zdarzeń w aplikacjach Web, jak i zastosowanie do tego Zend Framework. Zapraszam do lektury.