Использовать помощники вида в контроллерах в Zend Framework
У меня есть контроллер, который вызывается с AJAX (отправляет данные JSON), поэтому я не использую представление.
Мне нужно использовать персонализированный помощник представления для форматирования моих данных, но в моем контроллере.
Возможно ли это?
Или, может быть, я делает это неправильно (может быть, мне нужно иметь представление, но как с JSON)?
Ответы
Ответ 1
Вы можете получить доступ к любому элементу ViewHelper из контроллера с помощью
$this->view->helpername(/*params*/);
// or
$helper = $this->view->getHelper('helpername');
// or
$broker = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$broker->getView()->helpername(/*params*/);
См. Zend: как использовать пользовательскую функцию из помощника вида в контроллере?
Однако, возможно, вы правы, что делаете это неправильно (смешно pic btw), но я не могу сказать из вашего вопроса. Пожалуйста, уточните, почему вам нужно вызвать помощника вида и что он должен отформатировать.
Ответ 2
Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
Просто убедитесь, что возвращаемое представление - это представление, которое вы хотите. Потому что по линии, вид может быть перезаписан, а на контроллере у вас есть отброшенный новый вид.
И все те значения, которые вы настраиваете для представления на помощнике действий и т.п.... до того, как контроллер будет нажат? Все ушли с ветром!
Итак, перед тем, как предположить, что если вы получите ресурс просмотра, проверьте его. это действительно тот же ресурс, который вы ожидаете, и что все ваши вары все еще там.
Вы можете быть удивлены, как я!
Ответ 3
Вы можете создать экземпляр помощника.. это будет работать в контроллерах, моделях и везде, где вам нужен помощник.
например.
// create Instance
$serverUrl_helper = new Zend_View_Helper_ServerUrl();
// get the ServerUrl
$serverUrl = $serverUrl_helper->serverUrl();
Ответ 4
Другой подход - использовать ContextSwitch или AjaxContext action-helpers. Это позволяет использовать view- script, из которого вы можете затем вызвать свой помощник вида стандартным образом.
Ответ 5
Просто используйте помощники действий, многие помощники вида доступны также в качестве помощников действий.
Или непосредственно с помощью Zend_Date
или sprintf
.