Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu zend_framework Kanał ATOM (tag: zend_framework)

Autor wpisu: Load, dodany: 07.01.2012 21:39, tagi: php, framework, zend_framework

Wstęp

Dowiemy się co to takiego jest ten „Zend Framework”, gdzie można poczytać na jego temat, dla kogo jest kierowany i w czym może nam pomóc, wspomnę również o lekturach dla początkujących w które można lecz nie trzeba się zaopatrzyć.

Czym jest Zend Framework?

Zend jak każdy framework jest aplikacją, a w zasadzie tylko jej szkicem daje nam wiele możliwości i znacznie upraszcza pracę z kodem, choć na początku ogrom informacji w jaki musimy się zaopatrzyć może wskazywać na coś zupełnie innego. Zf daje nam wiele klas które możemy wykorzystać w naszych projektach od prostych operacji na bazie poprzez tworzenie i wyświetlanie plików pdf, aż do bibliotek obsługujących za nas całą robotę związaną z formularzami.

www.framework.zend.com

Główna strona projektu - Zend Framework możemy z niej pobrać aktualne wydanie fw (1.11.11) jak i wersję testowe (2.0.0beta1). Strona zapewnia nam obszerną dokumentację w kilku językach, niestety język polski był dostępny tylko do czasu i tylko w części, jego kopię można znaleźć na www.zend-framework.pl/manual. Tak jak pisałem jest częściowo przetłumaczona, dla osób nie znających j. angielskiego jest to jakieś wyjście. Tłumaczenie trwa jednak nadchodzący ZF2 różniący się dość sporo do swojego poprzednika zniechęca tłumaczy – szkoda ich pracy.

ZF dla każdego?

Nie, stanowczo nie! Jeśli nie znasz OOP lub podstaw php czas zacząć naukę – nie znając mechanizmów działania programowania obiektowego ciężko zabierać się za pracę z urządzeniem wyciskającym z niego ósme soki. W sieci znajduje się bardzo dużo kursów dla początkujących i średnio zaawansowanych – wystarczy poszukać. ;-) Jednak jak masz podstawy to możesz wystartować z tym potworem już po kilku godzinach, a Twój projekt będzie czymś więcej niż „Hello word”.

Zend przede wszystkim pokazuje nam jak powinien wyglądać przepływ informacji i dostarcza ogromną ilość gotowych modułów odwalających za nas brudną robotę, idealnym przykładem jest Zend_Form, za pomocą tej klasy możemy stworzyć formularz, dodać do niego odpowiednie ograniczenia i od tej pory wyświetlanie formularzu odbywa się poprzez wpisanie jednej linii kodu, gdy zostanie on wysłany zf sam sprawdzi wszystkie pola wedle kryterium podanego wcześniej i w razie potrzeby wygeneruje odpowiedni błąd. Tworzenie takiego formularza ogranicza się tak na prawdę do stworzenia klasy, a w jej ciele użycie kilku funkcji – ciężko to opisać bez przykładów a nie chcę mieszać już na starcie. ;-)

Książki o Zf

Na rynku w języku polskim jest niewiele papirusów które tak na prawdę mogą się nam przydać, jedynym wartym polecenia i w miarę aktualnym jest „Zend Framework od podstaw” Włodzimierza Gajdy ~530 stron tylko o Zend’zie za 89zł, Helion często daje rabaty wystarczy codziennie sprawdzać tutaj.

Podsumowanie

Suche informacje, bez kodu by nie wprowadzać zamieszania, warto przeczytać by mieć jakiś pogląd na sytuację i nie podbijać słońca z pióropuszem na głowie.

Autor wpisu: zleek, dodany: 01.01.2012 20:51, tagi: php, zend_framework

Tworząc formularze z użyciem Zend_Form mamy możliwość grupowania pól w różne obszary – fieldset. Jak zapewne wiecie, dla każdego obszaru mamy możliwość ustawienia etykiety. W kodzie html wygląda to następująco: Aby uzyskać efekt grupowania w formularzu, jego kod będzie wyglądał następująco: W linii 14 powyższego kodu dla instancji obiektu Zend_Form wywołujemy metodę “addDisplayGroup”, która nam [...]

Autor wpisu: zleek, dodany: 30.12.2011 10:59, tagi: php, zend_framework, css

Zapewne każdy, komu przyszło tworzyć formularz z wykorzystaniem komponentu Zend_Form spotkał się z problemem związanym z wyświetlaniem elementów typu hidden – Zend_Form_Element_Hidden. W celu pozbycia się standardowo generowanych elementów dt i dd, w które są opakowane poszczególne elementy formularza przygotowałem klasę SmartGroup_Model_Form, która dziedziczy po Zend_Form. Natomiast każdy formularz dziedziczy z kolei po SmartGroup_Model_Form, zamiast [...]

Autor wpisu: zleek, dodany: 26.12.2011 22:35, tagi: php, zend_framework, mysql

Klasa Zend_Db_Table jest zorientowanym obiektowo interfejsem pomiędzy naszym kodem, a tabelami w bazie danych. Widać więc, że ułatwia nam pracę tym bardziej, że dostarcza ona metody do wielu podstawowych operacji na danych przechowywanych w bazie. Dodatkową zaletą jest fakt, że użytkownik nie musi ingerować w poszczególne zapytania. Przygotowaniem odpowiednich zapytań dostosowanych do użytkowanej bazy danych [...]

Autor wpisu: zleek, dodany: 25.12.2011 21:16, tagi: php, zend_framework

Do tworzenia aplikacji w języku php używałem na początku Eclipse PDT, jednak od ponad roku przesiadłem się na Jetbrains PhpStorm. Obecnie to IDE dostępne jest w najnowszej wersji 3.0. Przez cały czas jednak zastanawiałem się, w jaki sposób rozwiązać problem podpowiadania składni w sytuacji, gdy metoda zwraca nam tablicę obiektów. Dla przykładu: Przykład może nie [...]

Autor wpisu: zleek, dodany: 25.12.2011 00:00, tagi: php, zend_framework, mysql

W najnowszym projekcie spotkałem się z dość dziwnym problemem dotyczącym wykonywania zapytania, podczas którego należało zrobić join na dwóch tabelach. Tabela, dla której przygotowywane było zapytanie została zdefiniowana następująco: Natomiast kod, który odpowiedzialny był za wykonanie zapytania prezentuje się następująco: Niestety przy próbie wykonania tego zapytania otrzymałem wyjątek “Zend_Db_Table_Select_Exception” z komunikatem: “Select query cannot join [...]

Autor wpisu: batman, dodany: 24.11.2011 08:00, tagi: zend_framework

W ramach szukania oszczędności czasu podczas tworzenia nowych aplikacji opartych o Zend Framework, zauważyłem iż najczęściej kopiowanym przeze mnie kodem jest część administracyjna, szumnie nazywana CRUD. Bardzo często jedyną zmianą jaką musiałem wprowadzić do kodu, była modyfikacja klasy modelu idąca w parze z dopisaniem nowej klasy formularza oraz ewentualne kosmetyczne zmiany w widokach. Mimo iż powyższe czynności nie są skomplikowane, marnują czas i dodatkowo generują sporo niepotrzebnego kodu w postaci kontrolerów i modeli. Z poczynionych obserwacji wyciągnąłem wnioski i napisałem prostą i funkcjonalną zarazem aplikację opartą o Zend Framework, która nie wymaga tworzenia zbędnych klas.

UniversalZF – konwencje

Aplikacja jest mieszanką konwencji oraz konfiguracji. Z jednej strony należy trzymać się założeń poczynionych przez autora (czyli mnie), z drugiej istnieje możliwość wprowadzenia ograniczonych zmian do mechanizmu dzięki konfiguracji przechowywanej w application.ini (lub odpowiedniku).

Najwięcej założeń poczyniłem w stosunku do bazy danych:

  • nazwy tabel są jednowyrazowe, pisane bez podkreślników oraz bez użycia camelCase, np user, page, book, products, itd
  • nazwy tabel odpowiadają dynamicznie obsługiwanemu kontrolerowi
  • kolumna będąca kluczem głównym nazywa się id
  • wszystkie tabele znajdują się domyślnym schemacie (w PostreSQL jest nim public)

Kolejnym wymogiem jest nazwa klasy formularza służącego do dodania/edycji rekordu. Musi ona odpowiadać nazwie tabeli w bazie danych, czyli dla user będzie nazywała się Application_Form_User. Ponadto nazwy pól w formularzu muszą odpowiadać nazwom pól w bazie danych.

I to wszystko. Jeśli powyższe warunki zostaną spełnione, będzie można korzystać z UniversalZF.

UniversalZF – konfiguracja

W przypadku konfiguracji, istnieje możliwość zdefiniowania:

  • kontrolera automatycznie obsługiwanego przez UniversalZF

    universal.page[] = "user"

    W powyższym przykładzie kontrolerem tym będzie user. Oznacza to, iż tabela w bazie danych nazywać się musi user, a klasa formularza Application_Form_User.

  • nazw kolumn pomijanych w widoku prezentującym tabelę z danymi
    universal.page.user.skipCols[] = "id"
    universal.page.user.skipCols[] = "password"
  • widoku jaki wyrenderuje się dla konkretnej akcji
    universal.page.user.view.index = "user/index.phtml"

Jak to działa?

Za wszystko odpowiedzialny jest plugin przechwytujący żądanie i sprawdzający, czy dany kontroler należy obsłużyć przy pomocy UniversalZF. Jeśli tak, na podstawie nazwy kontrolera tworzony jest obiekt modelu oraz obiekt DbTable, przy czym obiekt DbTable tworzy się dopiero w momencie, gdy jest potrzebny (lazy loading). Resztą zajmuje się kontroler universal posiadający akcje index (listowanie wszystkich danych z tabeli), add i edit (dodanie i edycja danych) oraz delete (usunięcie danych).

Ponieważ universal jest zwykłym kontrolerem, ktoś ciekawski mógłby wpaść na pomysł odwołania się do niego bezpośrednio. Wprawdzie ktoś taki za wiele by nie zdziałał, ale i tak warto takie zapędy ukrócić. W tym celu w pliku konfiguracyjnym znajduje się hash, doklejany w pluginie do parametrów przekazanych do akcji. Jeśli ktoś wejdzie bezpośrednio na kontroler universal, ten rzuci wyjątkiem o niepoprawnym hashu.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.