35.2. Скрипты контроллера

В контроллере вы создаете и конфигурируете экземпляр Zend_View. Затем вы объявляете переменные для этого экземпляра и подаете ему команду воспроизвести выходные данные, используя указанный скрипт.

35.2.1. Объявление переменных

Ваш скрипт контроллера должен объявить необходимые переменные для вида до того, как будет передан контроль скрипту вида. Обычно вы можете делать одно объявление за раз посредством объявления свойств экземпляра вида.

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

Однако это может оказаться утомительным, если вы уже имеете набор значений для присвоения в массиве или объекте.

Методы assign() дают возможность присваивать значения из массива или объекта "партиями". Следующий пример делает то же самое, что и приведенное выше последовательное объявление свойств.

<?php
$view = new Zend_View();

// определение массива из пар ключ-значение, где
// ключ является именем переменной,
// а значение - значением объявляемой переменной
$array = array(
    'a' => "Hay",
    'b' => "Bee",
    'c' => "Sea",
);
$view->assign($array);

// делаем то же самое с открытыми свойствами объекта;
// обратите внимание, что при объявлении мы приводим объект к массиву
$obj = new StdClass;
$obj->a = "Hay";
$obj->b = "Bee";
$obj->c = "Sea";
$view->assign((array) $obj);
?>
        

В качестве альтернативы вы можете использовать методы для последовательного объявления посредством передачи строки с именем переменной и значения переменной после нее.

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

35.2.2. Выполнение скрипта вида

После того, как вы определили все необходимые переменные, контроллер должен дать Zend_View команду выполнить указанный скрипт вида. Делайте это посредством вызова метода render(). Обратите внимание, что этот метод будет возвращать результат выполнения, но не выводить его, поэтому вам нужно самостоятельно вывести его посредством функции echo() или print() в подходящее время.

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

35.2.3. Пути к скриптам вида

По умолчанию Zend_View ищет скрипты вида относительно вызывающего скрипта. Например, если скрипт контроллера находится в /path/to/app/controllers и он вызывает $view->render('someView.php'), то Zend_View будет искать /path/to/app/controllers/someView.php.

Очевидно, что ваши скрипты вида могут находиться в другом месте. Чтобы указать Zend_View, где искать скрипты вида, используйте метод setScriptPath().

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

Теперь вы можете вызывать $view->render('someView.php'), он будет искать /path/to/app/views/someView.php.

Вы можете "складывать" в стек пути, используя метод addScriptPath(). Если вы добавили пути в стек, то Zend_View будет искать запрошенный скрипт вида в этих путях, начиная с пути, добавленного последним. Это дает возможность замещать виды, принятые по умолчанию, специальными видами, для того, чтобы можно было создавать специальные "темы" и "скины" для некоторых видов, оставляя в то же время другие в единственном варианте.

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

// теперь, когда вы вызываете $view->render('booklist.php'), Zend_View
// будет искать "/path/to/custom/booklist.php",
// затем "/path/to/app/views/booklist.php", 
// и под конец "booklist.php" в текущем каталоге.    
?>