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.