17.2. Skrypt kontrolera
Poprzedni | Rozdział 17. Zend_View | Następny

## 17.2. Skrypt kontrolera

Kontroler jest miejscem, w którym tworzysz i konfigurujesz instancję Zend_View. Potem przypisujesz do tej instancji zmienne zawierające dane, a następnie wybierasz skrypt widoku, który ma być zrenderowany.

### 17.2.1. Przekazywanie zmiennych

Twój skrypt kontrolera powinien przypisać potrzebne zmienne do instancji widoku, zanim przekaże kontrolę do skryptu widoku. Możesz to zrobić przypisując zmienne do zmiennych instancji widoku:

    <?php
    $view = new Zend_View();
    $view->a = "Hay";
    $view->b = "Bee";
    $view->c = "Sea";
    ?>

Jednak mogłoby być niewygodnie gdy zmienne, które masz przekazać są zebrane w tablicy lub obiekce.

Metoda assign() pozwala na automatyczne przypisanie wszystkich zmiennych z tablicy lub obiektu. Poniższe przykłady dają taki sam efekt jak poprzedni przykład, w którym zmienne były przypisywane pojedynczo:

    <?php
    $view = new Zend_View();

    // przypisuje tablicę zmiennych w postaci par
    // klucz-wartość, gdzie klucz jest nazwą przypisanej
    // zmiennej, a wartość jest jej wartościa.
    $array = array(
        'a' => "Hay",
        'b' => "Bee",
        'c' => "Sea",
    );
    $view->assign($array);

    // robi to samo z publicznymi właściwościami
    // obiektu. zauważ jak rzutujemy obiekt na
    // tablicę podczas przypisywania
    $obj = new StdClass;
    $obj->a = "Hay";
    $obj->b = "Bee";
    $obj->c = "Sea";
    $view->assign((array) $obj);
    ?>

Oczywiście możesz także przypisywać zmienne jedna po drugiej, przekazując nazwę zmiennej jako łańcuch znaków, a potem wartość zmiennej:

    <?php
    $view = new Zend_View();
    $view->assign('a', "Hay");
    $view->assign('b', "Bee");
    $view->assign('c', "Sea");
    ?>

### 17.2.2. Wykonywanie skryptu widoku

Kiedy już przypisałeś wszystkie zmienne, kontroler powinien przekazać obiektowi Zend_View informację o wykonaniu konkretnego skryptu widoku. Zrób to wywołując metodę render(). Zauważ, że ta metoda zwróci wygenerowany widok zamiast wyświetlając go, więc musisz sam go wyświetlić za pomocą funkcji echo() lub print().

    <?php
    $view = new Zend_View();
    $view->a = "Hay";
    $view->b = "Bee";
    $view->c = "Sea";
    echo $view->render('someView.php');
    ?>

### 17.2.3. Ścieżki skryptu widoku

Domyślnie, Zend_View oczekuje, że skrypty widoku są umieszczone w tym samym katalogu co skrypty kontrolera. Na przykład jeśli Twój skrypt kontrolera jest w katalogu "/path/to/app/controllers" i wywołuje on $view->render('someView.php'), to Zend_View będzie szukać pliku "/path/to/app/controllers/someVire.php".

Oczywiście, Twoje skrypty są pewnie umieszczone gdzieś indziej. Aby poinformować Zend_View o tym, gdzie ma szukać skryptów, użyj metody setScriptPath().

    <?php
    $view = new Zend_View();
    $view->setScriptPath('/path/to/app/views');
    ?>

Teraz kiedy wywołasz metodę $view->render('someView.php'), będzie ona szukać pliku "/path/to/app/views/someView.php".

Oczywiście możesz dodawać ścieżki na stos używająć metody addScriptPath(). Gdy dodajesz ścieżki na stos, Zend_View będzie szukać skryptu widoku począwszy od ostatnio dodanej ścieżki. To pozwala na nadpisanie domyślnych widoków za pomocą innych widoków, dzięki czemu możesz tworzyć różne "motywy" czy "skórki" dla niektórych widoków, zostawiając inne bez zmian.

    <?php
    $view = new Zend_View();
    $view->addScriptPath('/path/to/app/views');
    $view->addScriptPath('/path/to/custom/');

    // teraz gdy wywołasz $view->render('booklist.php'), Zend_View będzie
    // wpierw szukać pliku "/path/to/custom/booklist.php", potem
    // "/path/to/app/views/booklist.php", a ostatecznie pliku "booklist.php"
    // w bieżącym katalogu
    ?>

Poprzedni | Początek rozdziału | Następny
Rozdział 17. Zend_View | Spis treści | 17.3. Skrypty widoków