Rozdział 35. Zend_View

Spis treści

35.1. Wprowadzenie
35.1.1. Skrypt kontrolera
35.1.2. Skrypt widoku
35.1.3. Opcje
35.1.4. Narzędziowe metody dostępowe
35.2. Skrypt kontrolera
35.2.1. Przekazywanie zmiennych
35.2.2. Wykonywanie skryptu widoku
35.2.3. Ścieżki skryptu widoku
35.3. Skrypty widoków
35.3.1. Filtrowanie danych wyjściowych
35.3.2. Użycie alternatywnych systemów szablonów
35.4. Klasy pomocników
35.4.1. Wbudowane klasy pomocników
35.4.2. Ścieżki klas pomocników
35.4.3. Pisanie własnych klas pomocników

35.1. Wprowadzenie

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.

35.1.1. Skrypt kontrolera

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');
?>
        

35.1.2. Skrypt widoku

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.

35.1.3. Opcje

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.

35.1.4. Narzędziowe metody dostępowe

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.