[ZF #01] Pierwszy projekt
Wstęp
Odpalimy naszą pierwszą aplikację i na jej podstawie powiem coś o strukturze katalogów, plikach i kodzie w nich zawartym – same podstawowe informacje o funkcjonowaniu Zenda. Na ich podstawie każdy powinien umieć uruchomić swoją pierwszą stronę opartą o Zend.
Pobieramy Framweork
Pierwszą czynnością jaką musimy wykonać jest pobranie samego frameworka, możemy pobrać go tutaj, klikamy na wielki napis „Download New” i pobieramy interesującą nas paczkę, do wyboru mamy sam fw jak i z serverem lub dokumentacją. Jeśli nie chcemy żadnych dodatków klikamy na Zip lub tar.gz obok „Zend Framework 1.11.11 Minimal”, wersja oczywiście może się różnić od tej opisywanej tutaj.
Co dalej?
W paczce znajdziemy kilka folderów i plików, najważniejszym jest katalog library zawiera on wszystkie biblioteki Zend’a i na dobrą sprawę wystarczył by nam do wszystkiego, ale po co utrudniać sobie życie? Wrócimy do niego w dalszej części, katalog bin zawiera plik zf.bat dzięki niemu możemy wykonywać pewne operacje na naszej aplikacji nie odpalając naszego ide. Proponuję całą zawartość katalogu bin wrzucić do C:\Windows dzięki czemu korzystając w przyszłości z niego nie będziemy zmuszeni podawać całej ścieżki do pliku a tylko nazwę pliku zf.
Server
Jak pewnie wiecie (a jeśli nie, to czas przeczytać pierwszy wpis) aplikacje php potrzebują servera, tutaj jest kilka możliwości:
- Server w sieci
- Server na naszym Pc
- Gotowe rozwiązanie
- Ręczna instalacja
Osobiście polecam w etapie produkcyjnym rozwiązanie drugie, nie jest istotne czy zainstalujecie całą paczkę ręcznie czy użyjecie jakiejś gotowej. Jeśli nie masz jeszcze servera powinieneś się w niego zaopatrzyć. W dalszym etapie będę opisywać poczynania na maszynie lokalnej – tak jest wygodniej i oszczędzamy na opóźnieniach ftp.
Gdy mamy już server
Otwieramy konsolę cmd, standardowo znajdujemy się C:\User\nazwa_użytkownika używając komendy cd .. wychodzimy katalog do góry, a wpisując ścieżkę cd C:\Users\nazwa_użytkownika\Desktop dostaniemy się na pulpit (Windows 7) dla xp będzie to inna ścieżka – krótkie przypomnienie dla osób nie korzystających na codzie z konsoli.
Teraz możemy stworzyć nasz pierwszy projekt, wydajemy polecenie zf create project nazwa_projektu, jeśli wcześniej nie wkleiłeś pliku zf.bat do katalogu C:/Windows musisz podać pełną ścieżkę do pliku zf.bat np. C:/katalog/zf create project nazwa_projektu lub wejść do niego za pomocą komendy cd.
W oknie cmd powinniśmy dostać komunikat z ścieżką do nowo stworzonego projektu w moim przypadku jest to C:\Users\nazwa_użytkownika\Desktop\nazwa_projektu. Najlepiej wykonywać te operacje od razu w katalogu www naszego servera tym samym zaoszczędzimy sobie przenoszenia plików.
Co zawiera magiczny katalog nazwa_projektu
Zawartość katalogu nazwa_projektu powinna wyglądać tak:

Krótkie opisy poszczególnych katalogów i plików:
- application – zawiera naszą aplikację
- configs – jak sama nazwa mówi, katalog w którym znajdują się pliki konfiguracyjne całej aplikcji
- application.ini – główny plik konfiguracyjny aplikacji
- controllers – tutaj znajdują się kontrolery, każdy plik to jeden kontroler
- models – modele aplikacji
- views – miejsce na widoki aplikacji
- helpers - pomocnicy widoku
- scripts – główne pliki widoku
- Bootstrap.php - miejsce wstępnej konfiguracji i naszego kodu, plik jest wykonywany na wstępie naszej aplikacji
- docs – dokumentacja projektu (nie interesuje nas)
- library – pusty katalog do którego należy wkleić pobrany wcześniej katalog o takiej samej nazwie zawierają biblioteki
- pubpic – główny katalog servera www
- test – testy naszej aplikacji (nie interesuje nas)
- plik .zfproject.xml – plik wykorzystywanie przez zf.bat przechowuję strukturę naszej aplikacji (nie interesuje nas)
Pliki oznaczone jako (nie interesuje nas) zostawiamy w spokoju, na tym etapie nie są nam potrzebne wiec jeśli ktoś ma kaprys by pozbyć się nie potrzebnych elementów to śmiało może usunąć je.
Konwencja MVC
Część z Was pewnie jest ciekawa czym są magiczne kontrolery, widoki i modele – więc śpieszę z wyjaśnieniem.
Zf jest oparty na MVC, co to znaczy? MVC jest jednym z wielu wzorców programowania, ostatnimi czasy stał się bardzo modny zawdzięcza to jasnym podziałom między trzema częściami aplikacji M (model), V (widok), C (kontroler).
Kontroler zawiera w sobie konstrukcje sterujące, przyjmuje dane od użytkownika i na ich podstawie decyduje o potrzebnych danych prosi o nie model, on zaś kontaktując się np. z mysql pobiera je i przekazuje kontrolerowi, kontroler wywołuje odpowiedni widok i wysyła mu gotowe dane do wyświetlenia. Widok zawiera kod html i wstawki php z danymi otrzymanymi od kontrolera. Pomieszane? Nieee, wystarczy zobaczyć jak taki podział funkcjonuje i dostrzec jego zalety.
Kontrolery i akcje
Tak jak pisałem już w podczas krótkiego opisu MVC, kontroler decyduje o przyjęciu, zarządzaniu danymi kierując naszą aplikacją od czasu wywołania do przekazania danych do widoku.
Zaczniemy od początku, nowo stworzony projekt ma dwa kontrolery index i error odpowiednio w plikach IndexController.php i ErrorController.php w katalogu z kontrolerami.
W pliku IndexController.php znajduje się kod kontrolera:
<?php
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* kod uruchamiany przy starcie kontrolera index */
}
public function indexAction()
{
// akcja kontrolera index
}
}
Jak widzimy kontroler definiujemy poprzez utworzenie pliku o nazwie Nazwa_kontroleraController.php w odpowiednim katalogu, a w jego wnętrzu jest zadeklarowana klasa o nazwie Nazwa_kontroleraController dziedzicząca po Zend_Controller_Action.
W wnętrzu klasy widzimy metody, metody naszego autorstwa jak i aplikacji. Metoda init(){…}jest wywoływana zawsze przy użyciu kontrolera w którym jest zamieszczona, jej rolę można porównać do konstruktora, możemy w niej zadeklarować zmienne używane przez akcję, szablon itd. Drugą metodą jest indexAction(){…} jest to akcja naszego kontrolera, możemy zdeklarować ich dowolną ilość, a ich nazwa składa się z nazwy akcji i tekstu Action, w całości nazwa_akcjiAction().
Jak uruchomić kontroler i akcje
Czas zobaczyć pierwsze efekty naszych działań – zaczynamy. Przenosimy pliki naszego projektu do folderu www, przypominam że głównym katalogiem servera powinien być katalog www/public.
Załóżmy posiadanie domeny domena.pl równie dobrze może być nią localhost. Standardowo Zend używa pliku .htaccess do przekierowywania wszystkich wywołań nie kierujących do istniejącego zasobu na plik index.php który inicjuje naszą aplikację, zgodnie z tą zasadą linki:
- www.domena.pl
- www.domena.pl/index.php
- www.domena.pl/index.php/index
- www.domena.pl/index.php/index/index
- www.domena.pl/index
- www.domena.pl/index/index
- www.domena.pl/nie_istniejący_plik.php
Dadzą taki sam efekt czyli uruchomią plik index.php umieszczony w katalogu public, co będzie równoznaczne z uruchomieniem naszej aplikacji.
Pierwsza grupa linków uruchomią kontroler o nazwie index i kontroler o takiej samej nazwie, z tego możemy wywnioskować – gdy nie zostanie podana nazwa kontrolera lub/i akcji automatycznie zostanie uruchomiona akcja index z kontrolera index, zaś gdy podamy sam kontroler domyślnie zostanie uruchomiona jego akcja index.
Po wejściu na te linki powinniśmy zobaczyć standardowy ekran Zf:

Mając powyższe na uwadze możemy zapisać wzór:
www.domena.pl/nazwa_kontrolera/nazwa_akcji
Uruchomi on kontroler nazwa_kontrolera i akcje nazwa_akcji, jeśli nie zostaną zdeklarowane zostanie użyte standardowe o nazwie index.
Co się stanie gdy podamy nie istniejący kontroler lub akcję?
Gdy system nie będzie mógł odnaleźć wskazanej przez nas akcji bądź kontrolera zostanie uruchomiony kontroler error i jego akcja error, domyślnie po stworzeniu projektu taki kontroler istnieje i zajmuje się zarządzaniem błędami jego kod możemy znaleźć w katalogu aplication/controller/error. Zobaczmy więc jak będzie wyglądała strona błędu, poniższe linki są jednoznaczne:
- www.domena.pl/nie_ma_takiego_kontrolera
- www.domena.pl/index/nie_ma_takiego_kontrolera
- www.domena.pl/error/error
Strona będzie wyglądać tak:

Widoki
Na koniec przydało by się coś wspomnieć o widokach aplikacji, znajdują się do katalogu views i działają niczym szablony w akcjach przekazujemy do nich zmienne, a w nich je wyświetlamy używając php i klas Zend’a w przeciwieństwie np. od Smarty który ma własny język szablonów zamieniany na kod php.
Widoki odpowiadają akcjom, uruchamiając kontroler index i akcję index w katalogu z plikami widoków application\views\scripts musi istnieć katalog o nazwie kontrolera a w nim plik o nazwie akcji z rozszerzeniem .phtml. Zostanie on wywołany w momencie uruchomienie akcji mu odpowiadającej.
Nie chcę wgryzać się głębiej w widok ponieważ musiał bym tłumaczyć jego działanie, a tym się zajmę w innym wpisie, nadmienię że brak widoku aktywowanej akcji doprowadzi do błędu w aplikacji.
Podsumowanie
Dowiedzieliśmy się jak stworzyć projekt, czym są kontrolery, akcje i jak funkcjonują. Jest to sam wstęp wstępu więc czekajcie na następne wpisy, ale dzięki tym informacją każdy z Was powinien móc utworzyć statyczną stronę z kilkoma podstronami.
Mam nadzieję, że język jak i przykłady przytaczane są dość jasne i każdy z Was zrozumiał co miałem na myśli, nie jestem specjalistą od pióra, a przynajmniej nie w pisaniu poradników, co mam nadzieję się zmieni postaram się by każdy kolejny tekst był lepszy i lepszy od poprzedniego.