Zend Framework cz. III: kontrolery i widoki

Autor: Arkadiusz Tobiasz 25 czerwca 2011

W tej  części postaram się przybliżyć ideę kontrolerów i widoków jeśli chodzi o Zend Frameworki. Na wstępnie ważna uwaga 😉 Screeny, które będę prezentował pochodzą z serwisu, który powolutku sobie tworzę i Ty kopiując kod zawarty w moich listingach musisz być świadomy, że wygląd może odbiegać od tego co widać na obrazkach.

Ideę kontrolerów i widoków przedstawię na prezentując mechanizm rejestracji i logowania użytkowników w serwisie, który tworzę. W Zend Framework każda strona jest reprezentowana przez akcję (action), a akcje są grupowane w kontrolery (controller). Kontrolery grupują przede wszystkim pokrewne akcje, które obracają się wokół najczęściej jakiejś funkcjonalności naszego serwisu. Nazwa danego kontrolera i akcji widoczna jest w adresie URL naszej strony opartej o Zend Framework. Dla przykładu adres http://localhost/zend/user/register odnosi się do kontrolera „user” i akcji „register”. Wszystko ok, ale do jakiej akcji odniesie się adres http://localhost/zend/user? Każdy kontroler w Zend Framework posiada domyślną akcję index i ten adres odnosi się właśnie do tej akcji.

W Zend Framework kontrolery przechowuje się w katalogu controllers/ a plik nazywamy według schematu: [Nazwa kontrolera]Controller.php. Nazwa kontrolera powinna rozpoczynać się od dużej litery, a pozostałe litery powinny być małe. Jeżeli użyjemy jednak wielkiej litery, np. NazwaKontroleraController.php, to adres takiej strony będzie wyglądał następująco http://localhost/zend/nazwa-kontrolera.

W pliku według takiego samego schematu nazywamy klasę. Nazwa akcji natomiast rozpoczyna się od małej litery i tworzona jest według schematu [Nazwa akcji]Action(). Wszystkie akcje muszą być publiczne. Tak naprawdę kontroller to klasa, a akcje to publiczne metody umieszczone w ciele tej klasy.

W katalogu controllers/ tworzymy zatem plik UserController.php, w którym na początku umieszczamy dwie akcje „index” i „register”.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

class UserController extends Zend_Controller_Action
{
    public function indexAction()
    {
       echo '<div class="message">To jest akcja index</div>';
    }
    public function registerAction()
    {
       echo '<div class="message">To jest akcja register</div>';
    }
}

Po wyświetleniu strony http://localhost/zend/user powinien ukazać się nam tekst „To jest akcja index”, natomiast po wpisaniu adresu http://localhost/zend/user/register wyświetli się nam „To jest akcja register”.

Wszystko fajnie, ale coś chyba nie halo!? Pamiętasz pierwszą część mojego tutoriala? Jeżeli nie to chyba trzeba do niego wrócić 🙂 Jakie jest zadanie kontrolerów? Otóż kontroler jest swoistym łącznikiem pomiędzy Modelem a Widokiem. Dlaczego więc zajmuje się graficzną prezentacją danych użytkownikowi? Przecież to zadanie dla Widoku. Zatem z kontrolera powinny zniknąć tagi <div>.

W takim razie musimy odpowiednie fragmenty kodu przenieść do widoku. Pliki widoku będziemy umieszczać w katalogu views/scripts. W tym katalogu znajdą się katalogi, których nazwy będą tożsame z nazwą kontrolera, a więc w naszym wypadku musimy utworzyć katalog user/. W katalogi user/ będziemy umieszczać pliki będące widokami poszczególnych akcji w naszym kontrolerze. Pliki te domyślnie mają rozszerzenie .phtml. W naszym przypadku musimy utworzyć dwa pliki index.phtml i register.phtml.

Zacznijmy od modyfikacji kodu naszego kontrolera i akcji.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

class UserController extends Zend_Controller_Action
{
    public function indexAction()
    {
       $this->view->text = 'To jest akcja index';
    }
    public function registerAction()
    {
       $this->view->text = 'To jest akcja register';
    }
}

W akcjach ustawiliśmy pewne własności i tutaj chciałbym zaznaczyć, że nie odbywa się tu teraz wyświetlenie, czyli prezentacja danych użytkownikowi. Będzie to miało miejsce automatycznie, wtedy gdy będzie się wywoływany kontroler frontowy. Nasze widoki będą posiadały następujący kod:

index.phtml

1
<div class="message"><?php $this->text; ?></div>

register.phtml

1
<div class="message"><?php $this->text; ?></div>

Po ponownym wywołaniu adresów, które już podałem powinny dać takie same rezultaty. Tym samy graficzna prezentacja danych użytkownikowi odbywa się w Widokach 🙂

Jednak pewnie zauważyłeś, że w widokach nie mamy poprawnej struktury pliku HTML, brakuje w nich np. sekcji <head>. Chciałbym, abyś wrócił do drugiej części mojego tutoriala. Na samym końcu stworzyliśmy plik layout.phtml.

Otóż projektując stronę zazwyczaj pewne fragmenty kodu się powielają. W związku z tym nasz serwis korzysta ze wspólnego pliku umieszczonego w katalogu layoits/scripts/ o nazwie layout.phtml. Jeżeli przyjrzysz się strukturze tego pliku (podana została w drugiej części tutoriala) to dostrzeżesz, że za wyświetlanie widoków odpowiada następujący fragment kodu:

1
<?php echo $this->layout()->content ?>

Oto po krótce idea tworzenia kontrolerów, akcji i widoków. W kolejnej części napiszę co nieco o stylizacji naszego serwisu i metatagach oraz o modelach i wykorzystywaniu bazy danych MySQL w naszym projekcie.

Odpowiedz

 

Arkadiusz Tobiasz student Akademii Ekonomicznej im. Karola Adamieckiego w Katowicach na specjalnościach informatyka ekonomiczna oraz rachunkowość. Więcej...

jQuery Validation i funkcja remote

Jakiś czas temu zwrócił się do mnie użytkownik z problemem. Chodzi o to, że korzysta on z pluginu walidacji jQuery, […]

Zend Framework: integracja z Uploadify

W tym wpisie postaram się przedstawić Wam w jaki sposób zintegrować skrypt Uploadify z Zend Frameworkiem. Dzięki temu będziemy mogli […]

Javascript: Czasowe wyświetlanie reklamy

Czasami chcemy, aby na pewnym elemencie naszej strony wyświetlała się reklama przez jakiś czas, a następnie zniknęła. W tym wpisie […]

Linux: backup wszystkich baz danych MySQL

Swego czasu pisałem o tym jak z poziomu konsoli można szybko i przyjemnie zrobić backup bazy MySQL. Wszystko jest ładnie […]