#php #zend-framework #zend-framework2
#php #zend-framework #zend-framework2
Вопрос:
В моем ZF2 я пытаюсь использовать $this-> render(‘render/email / template’), но не удается загрузить файл, поэтому, когда я выполняю следующий метод, он сработал.
Но при использовании require_once
я не могу получить содержимое в $ variable для последующей обработки, оно мгновенно сбрасывает значение, где метод -> render() может поместить его в переменную.
Как мне использовать require_once
как ZF $this-> render?
define('ROOT_PATH', dirname(__DIR__));
require_once (ROOT_PATH . '/Controller/render/email/template.phtml');
Редактировать:
public function indexAction() {
error_reporting(E_ALL); ini_set('display_errors', 1);
/*
$this->layout('layout/email/header_footer');
$view = new ViewModel(array(
'name' => 'OKOKOKOK'
));
$view->setTemplate('layout/email/template');
$html= $view;
echo $html;*/
define('ROOT_PATH', dirname(__DIR__));
$this->layout('layout/email/header_footer');
$view = new ViewModel(array(
'name' => 'OKOKOKOK'
));
$view->setTemplate('layout/email/template');
$viewRenderer = $this->getServiceLocator()->get('ViewRenderer');
$html = $viewRenderer->render($view);
echo $html;
exit;
Ответ №1:
В ZF2 вам нужно установить и отобразить шаблон следующим образом, если вы хотите сохранить его в переменной:
$view->setTemplate(ROOT_PATH . '/Controller/render/email/template.phtml');
$viewRenderer = $this->getServiceLocator()->get('ViewRenderer');
$html = $viewRenderer->render($view);
Вы также можете вложить представления:
$mainView = new ViewModel();
$mainView->setTemplate(ROOT_PATH . 'path/to/your/header_footer.phtml');
$contentView = new ViewModel(array(
'name' => 'OKOKOKOK'
));
$contentView->setTemplate(ROOT_PATH . '/Controller/render/email/template.phtml');
$mainView->addChild($contentView, 'content');
Вы можете найти более подробную информацию здесь
Комментарии:
1. Выдает ОШИБКУ:
Fatal error: Call to undefined method ZendViewModelViewModel::setScriptPath() in TestController.php
2. @YumYumYum Видимо, они изменили это в ZF2. Попробуйте мой обновленный ответ.
3. ОТЛИЧНАЯ работа, парень. пожалуйста, проверьте мою правку выше. Он работает для повторения template.phtml, но не использует макет, который я назначил header_footer , внутри header_footer.phtml у меня есть
<?=$this->layout()->content; ?>
4. @YumYumYum итак, вы хотите отобразить header_footer.phtml и
$this->layout()->content
заменить на template.phtml?5. @YumYumYum смотрите мой обновленный ответ. Они также описывают макеты в ссылке, которую я добавил.
Ответ №2:
Обновления Simon.
<?php
namespace ApplicationController;
use ZendMvcControllerAbstractActionController;
use ZendViewModelViewModel;
use ZendDebugDebug;
class TestController extends AbstractActionController {
public function irender($html, $input) {
$view = new ViewModel($input);
//$view->setTemplate('layout/email/default');
$view->setTemplate($html);
$viewRenderer = $this->getServiceLocator()->get('ViewRenderer');
return $viewRenderer->render($view);
}
public function indexAction() {
error_reporting(E_ALL); ini_set('display_errors', 1);
/*
Project path where the file is: /var/www/html/projectzf/module/Application/view/layout/email/default.phtml
*/
echo $this->irender('layout/email/default', array(
'name' =>'OK OK OK'
));
exit;
}
}
Комментарии:
1. Кстати, если вам не нужен html для последующего использования, вы можете опустить всю
$viewRenderer
часть и просто сделатьreturn $view;