ZF2 — как использовать require_once как $this->render?

#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;