Как отрендерить шаблон веточки и вернуть функцию zend framework

Я перехожу с zend framework 1 на 3, и у меня есть функция, которая возвращает шаблон веточки, но я не знаю, что мне использовать для рендеринга шаблона ветки представления на zf3

Как:

  • использовать класс зрителя
  • установить мой путь к шаблону
  • установить массив для рендеринга в шаблоне
  • шаблон возврата

код:

protected function convertItemList($aItemList)
{
    $aSet = [];
    //$config['template_paths'] = [APPLICATION_PATH . '/../library/Core/Backend/SRO/Views/'];
    //$oView = new Core_Twig_View($config);
    if (!$aItemList) {
        return [];
    }
    foreach ($aItemList as $iKey => $aCurItem) {
        $aSpecialInfo = [];
        $aInfo = $aCurItem;
        $aInfo['info'] = $this->getItemInfo($aCurItem);
        $aInfo['blues'] = $this->getBluesStats($aCurItem, $aSpecialInfo);
        $aInfo['whitestats'] = $this->getWhiteStats($aCurItem, $aSpecialInfo);
        //$oView->assign('aItem', $aInfo);
        $i = isset($aCurItem['Slot']) ? $aCurItem['Slot'] : $aCurItem['ID64'];
        if ($aCurItem['MaxStack'] > 1) {
            $aSet[$i]['amount'] = $aCurItem['Data'];
        }
        $aSet[$i]['TypeID2'] = $aInfo['TypeID2'];
        $aSet[$i]['OptLevel'] = $aInfo['OptLevel'];
        $aSet[$i]['RefItemID'] = !isset($aCurItem['RefItemID']) ? 0 : $aCurItem['RefItemID'];
        $aSet[$i]['special'] = isset($aInfo['info']['sox']) && $aInfo['info']['sox'] ? true : false;
        $aSet[$i]['ItemID'] = $aCurItem['ID64'];
        $aSet[$i]['ItemName'] = $aInfo['info']['WebName'];
        $aSet[$i]['imgpath'] = $this->getItemIcon($aCurItem['AssocFileIcon128']);
        //$aSet[$i]['data'] = $oView->render('itemData.twig');
    }
    return $aSet;
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
389
1

Ответы 1

Пользуюсь этим модулем https://github.com/OxCom/zf3-twig. Вы можете установить его по инструкции github и добавить этот параметр в массив конфигурации zf3:

   'service_manager' => array(
      'factories' => array(
         ...
         'TwigStrategy' => \ZendTwig\Service\TwigStrategyFactory::class,
         ...
       ),
    )

1) После этого вы можете использовать Twig в каком-либо действии какого-либо контроллера с помощью этого кода:

   function someAction(){
      ...

      $viewModel = new ZendTwig\View\TwigModel(['foo'=>'bar']);
      return $viewModel;
   }

2) Чтобы установить другой шаблон:

   function someAction(){
      $viewModel = new ZendTwig\View\TwigModel(['foo'=>'bar']);
      $viewModel->setTemplate('application/controller/name'); //set path here
      return $viewModel;
   }

3) Вы можете установить переменные массива с помощью параметра TwigModel "__construct":

   function someAction(){
      $viewModel = new ZendTwig\View\TwigModel($someVariablesArray);
      $viewModel->setTemplate('application/controller/name'); //set path here
      return $viewModel;
   }

4) Если нужно вернуть html-код, нужно что-то сделать:

  • Добавьте в конфигурацию сервисов еще один параметр:
   'service_manager' => array(
      'factories' => array(
         ...
         'TwigStrategy' => \ZendTwig\Service\TwigStrategyFactory::class,
         'TwigRenderer'  => \ZendTwig\Service\TwigRendererFactory::class,
         ...
       ),
    )
  • Добавьте службу TwigRenderer на фабрику контроллеров:
class YourControllerFactory implements FactoryInterface
{
   public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
   {
      return new YourController($twigRenderer);
   } 
}

и получите twigRenderer в своем контроллере:

   private $twigRenderer;

   public function __construct($twigRenderer)
   {
      $this->twigRenderer = $twigRenderer;
   }
  • После этого получите html:
   function someAction(){

      $viewModel = new ZendTwig\View\TwigModel(['foo'=>'bar']);
      $viewModel->setTemplate('mails/order/order_in_process');
      $html = $this->twigRenderer->render($viewModel);
      return $html;
   }

Извините за мой английский!

Другие вопросы по теме