Zend_View jest klasą zapewniającą obsługę części widoku ("view") we wzorcu projektowym MVC (model-view-controller). Istnieje ona w celu oddzielenia wyglądu aplikacji od kontrolerów i danych. Zapewnia system skryptów pomocników i filtrów.
Zend_View jest bardzo prostym systemem; możesz użyć PHP jako jezyka szablonów lub utworzyć instancje innych systemów szablonów, a następnie manipulować nimi wewnątrz skryptu widoku.
Zasadniczo użycie Zend_View składa się z dwóch kroków: 1. Twój skrypt kontrolera tworzy instancję klasy Zend_View i przekazuje zmienne do tej instancji. 2. Kontroler mówi obiektowi Zend_View aby przetworzył określony skrypt widoku, skutkiem tego jest wygenerowanie wyjściowego widoku.
Aby pokazać prosty przykład załóżmy, że kontroler ma dane w postaci listy książek i chcemy aby były one przetworzone jako widok. Skrypt kontrolera mógłby wyglądać tak:
<?php // użyjmy modelu aby uzyskać dane o autorach książek i ich tytułach $data = array( array( 'author' => 'Hernando de Soto', 'title' => 'The Mystery of Capitalism' ), array( 'author' => 'Henry Hazlitt', 'title' => 'Economics in One Lesson' ), array( 'author' => 'Milton Friedman', 'title' => 'Free to Choose' ) ); // przekażmy dane o książkach do instancji Zend_View Zend_Loader::loadClass('Zend_View'); $view = new Zend_View(); $view->books = $data; // wygenerujemy wyjściowy widok o nazwie "booklist.php" echo $view->render('booklist.php'); ?>
Teraz potrzebujemy skryptu widoku "booklist.php". Jest to skrypt PHP jak każdy inny, z jednym wyjątkiem: jest on wykonywany w przestrzeni instancji Zend_View, co oznacza, że odnosi się on do właściwości i metod klasy Zend_View za pomocą $this. (Zmienne przekazane do tej instancji przez kontroler sa publicznymi właściwościami instancji Zend_View.) Więc bardzo prosty skrypt mógłby wyglądać tak:
<?php if ($this->books): ?> <!-- Tabela z książkami. --> <table> <tr> <th>Autor</th> <th>Tytuł</th> </tr> <?php foreach ($this->books as $key => $val): ?> <tr> <td><?php echo $this->escape($val['author']) ?></td> <td><?php echo $this->escape($val['title']) ?></td> </tr> <?php endforeach; ?> </table> <?php else: ?> <p>Nie ma żadnych książek do wyświetlenia.</p> <?php endif; ?>
Zauważ, że używamy metody "escape()" aby przefiltrować zmienne wyjściowe.
Zend_View
posiada kilka opcji, które mogą być użyte do
skonfigurowania zachowania skryptów widoków.
basePath:
określa bazową ścieżkę, wewnątrz
której znajdują się skrypty widoków, klasy pomocników oraz
klasy filtrów. Zakładane jest, że struktura katalogów
wygląda tak:
base/path/ helpers/ filters/ scripts/ ]
Ta opcja może być ustawiona za pomocą metody
setBasePath()
, metody addBasePath()
,
lub jako opcja basePath
przekazana do
konstruktora.
encoding:
określa kodowanie znaków, które ma być
użyte przez metody htmlentities()
,
htmlspecialchars()
oraz w innych operacjach.
Domyślnie jest to ISO-8859-1 (latin1). Może być ustawione za
pomocą metody setEncoding()
lub jako opcja
encoding
konstruktora.
escape:
określa funkcję używaną przez metodę
escape()
. Może być ustawiona za pomocą metody
setEscape()
lub za pomocą opcji escape
konstruktora.
filter:
określa filtr, który ma być użyty po
zrenderowaniu skryptu widoku. Może być ustawiony za pomocą
metody setFilter()
, metody addFilter()
,
lub za pomocą opcji filter
konstruktora.
strictVars:
zmusza Zend_View
do
wyświetlania not i ostrzeżeń, wtedy gdy zdarzy się próba
uzyskania dostępu do niezainicjowanych zmiennych widoków.
Może to być ustawione przez wywołanie metody
strictVars(true)
lub przekazanie opcji
strictVars
do konstruktora.
W większości przypadków będziesz używał tylko metod
assign()
, render()
, lub jednej z metod
do ustawiania/dodawania filtrów, klas pomocników oraz ścieżek
skryptów widoków. Jednak jeśli chcesz samodzielnie rozszerzyć klasę
Zend_View
, lub potrzebujesz dostępu do jej pewnych
wewnętrznych funkcjonalności, to możesz użyć kilku istniejących
metod dostępowych:
getVars()
zwraca wszystkie przypisane zmienne.
clearVars()
wyczyści wszystkie przypisane
zmienne; użyteczne gdy chcesz ponownie użyć obiektu widoku,
ale chcesz zachować kontrolę nad tym, które zmienne mają
być dostępne.
getScriptPath($script)
zwraca ścieżkę dla
podanego skryptu widoku.
getScriptPaths()
zwraca wszystkie
zarejestrowane ścieżki skryptów widoków.
getHelperPath($helper)
zwraca ścieżkę dla
podanej klasy pomocnika.
getHelperPaths()
zwraca wszystkie
zarejestrowane ścieżki klas pomocników.
getFilterPath($filter)
zwraca ścieżkę dla
podanej klasy filtra.
getFilterPaths()
zwraca wszystkie zarejestrowane
ścieżki klas filtrów.