Множественные контексты действий в Zend

#php #zend-framework

#php #zend-framework

Вопрос:

Я новичок в Zend и работаю над проектом, который требует трех контекстов для определенного действия. Существует стандартный контекст, который обычно используется, контекст AJAX для вызовов AJAX и, наконец, контекст, удобный для печати. Цель состоит в том, чтобы у каждого из них было свое собственное представление, поэтому используемые файлы просмотра были бы чем-то вроде:

/action_name.phtml /action_name.ajax.phtml /action_name.print.phtml

Я прочитал http://framework.zend.com/manual/en/zend.controller.actionhelpers.html и придумал:

 public function init()
{
    // add any necessary context switching here
    $contextSwitch = $this->_helper->getHelper('AjaxContext');
    $contextSwitch->addActionContext('history', 'html')
        ->initContext();
    //need to add another context for the print view
    $this->_helper->getHelper('contextSwitch')->addActionContext('history','print')->initContext();
}
  

Я убежден, что первые две строки работают, но я не уверен, правильно ли я использую контекст печати, поскольку в примерах вторым параметром обычно является тип файла, такой как JSON, XML, HTML и т.д. Правильно ли я поступаю или есть что-то еще, что я должен делать?

Ответ №1:

Все это есть в документации. Если вам нужны пользовательские контексты, вы должны сначала добавить их:

 $this->_helper
     ->getHelper('contextSwitch')
     ->addContext('print', array(
           // context options go here
       ))
     ->addActionContext('history', 'print')
     // more addActionContext()s goes here
     ->initContext();
  

Ответ №2:

Что вы могли бы сделать вместо использования контекста для представления печати, так это просто указать параметр в URL, подобный /print/1 . Затем в действии контроллера проверьте, имеет ли этот параметр значение true, и если это так, отобразите сценарий просмотра «печать» вместо обычного сценария просмотра.