Введение в Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Ttranslation 27.4% Update 2010-11-28 - Revision 23238 - Version ZF 1.11.x

    77.2. Скрипты контроллеров

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

    77.2.1. Установка переменных

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

    $view = new Zend_View();
    $view->"Hay";
    $view->"Bee";
    $view->"Sea";

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

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

    $view = new Zend_View();

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

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

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

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

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

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

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

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

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

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

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

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

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

    $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" в текущем каталоге.
    [Замечание] Никогда не используйте пользовательский ввод при установке путей к скриптам вида

    Zend_View использует пути к скриптам для поиска и рендеринга скриптов вида. Эти директории должны быть заранее известны и находиться под вашим контролем. Никогда не устанавливайте пути к скриптам вида на основе пользовательского ввода. Например, для атаки может использоваться следующий ввод:

    // $_GET['foo'] == '../../../etc'
    $view->addScriptPath($_GET['foo']);
    $view->render('passwd');

    Хотя этот пример надуманный, он ясно демонстрирует потенциальную уязвимость. Если вы не можете обойтись без использования пользовательского ввода при установке пути к скриптам вида, то должным образом фильтруйте ввод и удостоверяйтесь, что полученный путь находится под контролем вашего приложения.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...