Zend Framework - слой просмотра

Слой представления - это уровень представления приложения MVC. Он отделяет логику приложения от логики представления. В типичном веб-приложении PHP вся бизнес-логика и дизайн перемешаны. Перемешивание позволяет ускорить разработку небольшого проекта. Но он терпит неудачу в большом проекте, где задействовано много архитектуры высокого уровня. Чтобы изменить дизайн веб-приложения, разработчику также необходимо поработать над бизнес-логикой. Это может иметь катастрофические последствия и привести к нарушению бизнес-логики.

Zend Framework предоставляет хорошо продуманный, чистый, гибкий и расширяемый слой просмотра. Слой просмотра доступен как отдельный модуль,Zend/View и прекрасно интегрировать с Zend/Mvcмодуль. Слой Zend View разделен на несколько компонентов, прекрасно взаимодействующих друг с другом.

Его различные компоненты следующие:

  • Variables Containers - Содержит данные слоя просмотра.

  • View Models - Содержит переменные контейнеры и шаблон дизайна.

  • Renderers - Обработайте данные и шаблон из модели представления и выведите представление проекта, возможно, окончательный вывод html.

  • Resolvers - Разрешает шаблон, доступный в модели представления, таким образом, чтобы средство визуализации могло его использовать.

  • View (Zend\View\View) - Сопоставляет запрос рендереру, а затем рендереру ответу.

  • Rendering Strategies - Используется View для отображения запроса на рендерер.

  • Response Strategies - Используется View для отображения ответа на рендерер.

Слой просмотра, View обрабатывает ViewModel, разрешает шаблон с помощью Resolver, сделайте это с помощью Rendering Strategy и, наконец, выводит его с помощью Response Renderer.

Просмотр конфигурации слоя

Как и контроллер, уровень просмотра можно настроить в файле конфигурации модуля, который называется - module.config.php. Основная конфигурация - указать, где будут размещаться шаблоны. Это можно сделать, добавив следующую конфигурацию в «module.config.php».

'view_manager' => [ 
   'template_path_stack' => ['tutorial' => __DIR__ . '/../view',], 
]

По умолчанию слой View имеет поведение по умолчанию для всех своих компонентов. Например,ViewModelразрешает имя шаблона действия контроллера внутри корня шаблона по правилу «нижний регистр имени модуля / нижнего регистра имя контроллера / нижнего регистра имя действия». Однако это может быть отмененоsetTemplate() метод ViewModel.

Контроллеры и слой представления

По умолчанию контроллеру не нужно отправлять какие-либо данные на уровень представления. Достаточно написать шаблон в нужном месте.

Например, в нашем примере TutorialController, шаблон необходимо разместить в myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. Вindex.phtmlссылается на шаблон на основе PHP, и он будет отображаться PHPRenderer. Существуют и другие средства визуализации, такие какJsonRenderer за json выход и FeedRenderer за rss и atom вывод.

Полный список выглядит следующим образом -

<?php  
namespace Tutorial\Controller;  
use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel;  
class TutorialController extends AbstractActionController { 
   public function indexAction() { 
   } 
}

Шаблон приложения Zend

<div class = "row content"> 
   <h3>This is my first Zend application</h3> 
</div>

Наконец, мы успешно завершили Tutorial модуль, и мы можем получить к нему доступ, используя url - http://localhost:8080/tutorial.

Передача данных на уровень просмотра

Самый простой способ отправить данные на уровень представления - использовать ViewModelаргументы. ИзмененныйindexAction метод выглядит следующим образом -

public function indexAction() { 
   $view = new ViewModel([ 'message' => 'Hello, Tutorial' ]); return $view; 
}

Теперь измените index.phtml файл следующим образом -

<div class = "row content"> 
   <h3>This is my first Zend application</h3> 
   <h4><?php echo $this->message?></h4> 
</div>

Просмотр помощников

Помощник по представлению используется для написания небольших элементарных функций, которые будут использоваться в шаблонах. Zend framework предоставляет интерфейс Zend \ View \ Helper \ HelperInterface для написания стандартных помощников представления.

HelperInterface имеет всего два метода:

  • setView() - Этот метод принимает экземпляр / реализацию Zend \ View \ Renderer \ RendererInterface.

  • getView() - Он используется для получения этого экземпляра.

Полный листинг кода HelperInterface выглядит следующим образом -

namespace Zend\View\Helper;  
use Zend\View\Renderer\RendererInterface as Renderer;  
interface HelperInterface { 
   /** 
      * Set the View object 
      * 
      * @param  Renderer $view 
      * @return HelperInterface 
   */ 
   public function setView(Renderer $view);  
   /** 
      * Get the View object 
      * 
      * @return Renderer 
   */ 
   public function getView(); 
}

Чтобы использовать помощник в сценарии представления, откройте его, используя $this->helperName().

Встроенные помощники

Zend Framework предоставляет множество встроенных вспомогательных функций для различных целей. Некоторые из помощников просмотра, доступных вzend-mvc следующие -

URL

Помощник URL используется для генерации URL-адресов, соответствующих маршрутам, определенным в приложении.

Определение помощника URL-адреса -

$this->url($name, $params, $options, $reuseMatchedParameters)

Например, в учебном модуле маршрут называется tutorial и имеет два параметра action и id. Мы можем использовать помощник URL-адресов для создания двух разных URL-адресов, как показано ниже -

<a href = "<? = $this->url('tutorial'); ?>">Tutorial Index</a>  
<a href = "<? = $this->url('tutorial', ['action' => 'show', 'id' =>10]); ?>"> 
   Details of Tutorial #10 
</a>

Результат будет следующим -

<a href = "/tutorial">Tutorial Index</a>  
<a href = "/tutorial/show/10"> Details of Tutorial #10</a>

Заполнитель

Помощник-заполнитель используется для сохранения содержимого между сценариями представления и экземплярами представления. Он предоставляет возможность изначально установить данные, а затем использовать их на более поздних этапах.

Например, мы можем установить, скажем, company name а затем используйте его во всех других местах.

<?php $this->placeholder('companyname')->set("TutorialsPoint") ?>  
<?= $this->placeholder('companyname'); ?>

Заполнитель предоставляет некоторые из расширенных параметров для создания сложного содержимого из массива и объектов PHP. Он также имеет возможность захвата определенного раздела самого шаблона.

Например, следующий код фиксирует промежуточный результат шаблона и сохраняет его в productlist заполнитель.

Class – Product

class Product { 
   public $name; 
   public $description; 
}

Controller

$p1 = new Product(); 
$p1->name = 'Car'; $p1->description = 'Car';  
$p2 = new Product(); $p2->name = 'Cycle'; 
$p2->description = 'Cycle'; $view = new ViewModel(['products' => $products]);

Template

<!-- start capture --> 
<?php $this->placeholder('productlist')->captureStart(); 
   foreach ($this->products as $product): ?> 
<div> 
   <h2><?= $product->name ?></h2> <p><?= $product->description ?></p> 
</div> 
<?php endforeach; ?> 
<?php $this->placeholder('productlist')->captureEnd() ?> <!-- end capture --> <?= $this->placeholder('productlist') ?>

Result

<div class = "foo"> 
   <h2>Car</h2> 
   <p>Car</p> 
</div>
<div class = "foo"> 
   <h2>Cycle</h2> 
   <p>Cycle</p> 
</div>

Doctype

Помощник Doctype используется для создания различных типов документов HTML. Это конкретная реализацияPlaceholderпомощник. Тип документа может быть установлен в файле начальной загрузки и файле конфигурации.

Основное использование показано ниже -

Application Bootstrap file

use Zend\View\Helper\Doctype;  
$doctypeHelper = new Doctype(); $doctypeHelper->doctype('XHTML5');

Module Configuration

// module/Application/config/module.config.php: 
return [ 
   /* ... */ 
   'view_manager' => [ 
      'doctype' => 'html5', 
      /* ... */ 
   ], 
];

Template

<?php echo $this->doctype() ?>

HeadTitle

Помощник HeadTitle используется для создания элемента заголовка html. Это конкретная реализацияPlaceholderпомощник. Zend предоставляет возможность установить заголовок в файле конфигурации модуля, и его можно установить на любом уровне, таком как сайт, модуль, контроллер, действие и т. Д. Частичный код для HeadTitle выглядит следующим образом:

Module

headTitleHelper->append($action); 
$headTitleHelper->append($controller); 
$headTitleHelper->append($module); 
$headTitleHelper->append($siteName);

Template

<?= $this->headTitle() ?>

Result

action - controller - module - Zend Framework

HeadMeta

Помощник HeadMeta используется для создания метатегов HTML. Это конкретная реализация помощника Placeholder.

Template -

<?php 
   $this->headMeta()->appendName('keywords', 'turorialspoint, zend framework, php');  
   echo $this->headMeta() 
?>

Result

<meta name = "keywords" content = "tutorialspoint, zend framework, php" />

HeadLink

Помощник HeadLink используется для создания HTML-ссылок для включения внешних ресурсов. Это конкретная реализация помощника Placeholder.

Template

<?php 
   // setting links in a view script: 
   $this->headLink(['rel' => 'icon', 'href' => '/img/favicon.ico'], 'PREPEND') 
      ->appendStylesheet('/styles/site.css') 
      ->prependStylesheet('/styles/mystyle.css', 'screen', true, ['id' => 'mystyle']);  
   
   // rendering the links from the layout: 
   echo $this->headLink(); 
?>

Result

<link href = "/styles/mystyle.css" media = "screen" rel = "stylesheet" 
   type = "text/css" id = "mystyle"> 
<link href = "/img/favicon.ico" rel = "icon"> 
<link href = "/styles/site.css" media = "screen" rel = "stylesheet" type = "text/css">

HeadStyle

Помощник HeadStyle используется для создания встроенных стилей CSS. Это конкретная реализация помощника Placeholder.

Template

<?php $this->headStyle()->appendStyle($styles); ?> <?php echo $this->headStyle() ?>

HeadScript

HeadScript используется для создания встроенного скрипта или для включения внешних скриптов. Это конкретная реализация помощника Placeholder.

Template

<? $this->headScript()->appendFile(‘/js/sample.js’);?> <?php echo $this->headScript() ?>

InlineScript

InlineScript используется для создания сценария как в заголовке, так и в основной части шаблона html. Он получен из HeadScript.

HTMLList

HTMLList используется для создания упорядоченного и неупорядоченного списка. Определение HTMLList следующее:

Definition

htmlList($items, $ordered, $attribs, $escape)

Template

$items = [ '2015', ['March', 'November'], '2016', ]; echo $this->htmlList($items);

Result

<ul> 
   <li>2015 
      <ul> 
         <li>March</li> 
         <li>November</li> 
      </ul> 
   </li> 
   <li>2016</li> 
</ul>

Цикл

Цикл используется для создания альтернатив в циклической среде. Он имеет функции assign, next и prev.

Controller

$view = new ViewModel(['message' => 'Hello, Tutorial', 'data' => array('One', 'Two')]);

Template

<?php $this->cycle()->assign(['#F0F0F0', '#FFF'], 'colors'); ?> <table> <?php foreach ($this->data as $datum): ?> <tr style = "background-color: <?= $this->cycle()->setName('colors')>next() ?>">
      <td><?= $this->escapeHtml($datum) ?></td>
   </tr>
   <?php endforeach ?>
</table>

Result

<table> 
   <tr style = "background-color: #F0F0F0"> 
      <td>One</td> 
   </tr> 
   <tr style = "background-color: #FFF"> 
      <td>Two</td> 
   </tr> 
</table>

Вот несколько других важных встроенных помощников:

  • BasePath - BasePath используется для создания пути к общей папке корня приложения.

  • Partial - Частичный используется для рендеринга определенного шаблона в его собственной переменной области.

  • PartialLoop - PartialLoop похож на Partial, но используется в циклической среде.

  • Identity - Удостоверение используется для получения идентификационных данных вошедшего в систему пользователя из службы аутентификации.

  • JSON- JSON используется в спокойной среде, где вывод находится в формате JSON. Он генерирует правильный HTTP-заголовок и отключает концепцию макета.

В Zend Framework по-прежнему доступно множество помощников, таких как i18n helper, form helpers, pagination helpers, navigation helpers, и т.д.

Создание помощников просмотра

Zend Framework предоставляет встроенную AbstractHelper реализация HelperInterface написать помощников просмотра.

Шаги, необходимые для написания нового помощника, следующие:

  • Step 1 - Расширить класс Zend \ View \ Helper \ AbstractHelper.

  • Step 2 - Отменить __invoke() функция.

  • Step 3 - Установите конфигурацию в module.config.php file.

  • Step 4 - Используйте помощник просмотра в сценариях просмотра.

Давайте теперь создадим TestHelper

Создать папку Helper в myapp/module/Tutorial/src/View directory. НаписатьTestHelper внутри каталога Helper, TestHelper.php.

Полный список выглядит следующим образом -

<?php  
namespace Tutorial\View\Helper; 
use Zend\View\Helper\AbstractHelper; 
class TestHelper extends AbstractHelper { 
   public function __invoke() { 
      $output = "I am from test helper"; return htmlspecialchars($output, ENT_QUOTES, 'UTF-8'); 
   } 
}

Установить конфигурацию в module.config.php.

'view_helpers' => [ 
   'aliases' => [ 
      'testHelper' => View\Helper\TestHelper::class, 
   ], 
   'factories' => [ 
      View\Helper\TestHelper::class => InvokableFactory::class, 
   ],
],

Используйте только что созданный TestHelper в about просмотр скрипта.

<?= $this->testHelper() ?>