Учебники

Zend Framework — Просмотр слоя

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

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

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

  • Контейнеры переменных — содержит данные слоя представления.

  • Просмотр моделей — содержит переменные контейнеры и шаблон дизайна.

  • Средства визуализации — обрабатывают данные и шаблон из View Model и выводят представление проекта, возможно, окончательный вывод html.

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

  • Просмотр (Zend \ View \ View) — сопоставляет запрос с средством визуализации, а затем с средством визуализации в ответ.

  • Стратегии рендеринга — Используется View для отображения запроса к рендереру.

  • Стратегии отклика — используются представлением для сопоставления рендерера с откликом.

Контейнеры переменных — содержит данные слоя представления.

Просмотр моделей — содержит переменные контейнеры и шаблон дизайна.

Средства визуализации — обрабатывают данные и шаблон из View Model и выводят представление проекта, возможно, окончательный вывод html.

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

Просмотр (Zend \ View \ View) — сопоставляет запрос с средством визуализации, а затем с средством визуализации в ответ.

Стратегии рендеринга — Используется View для отображения запроса к рендереру.

Стратегии отклика — используются представлением для сопоставления рендерера с откликом.

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

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

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

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

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

Контроллеры и View Layer

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

Например, в нашем примере, 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>

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

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

HelperInterface имеет только два метода,

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

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

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)

Например, в учебном модуле маршрут называется учебным и имеет два параметра 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> 

Заполнитель

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

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

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

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

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

Класс — Продукт

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

контроллер

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

шаблон

<!-- 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') ?> 

Результат

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

Doctype

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

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

Загрузочный файл приложения

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

Конфигурация модуля

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

шаблон

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

HeadTitle

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

модуль

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

шаблон

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

Результат

action - controller - module - Zend Framework

HeadMeta

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

Шаблон

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

Результат

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

HeadLink

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

шаблон

<?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(); 
?>

Результат

<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.

шаблон

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

HeadScript

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

шаблон

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

InlineScript

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

HtmlList

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

Определение

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

шаблон

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

Результат

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

цикл

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

контроллер

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

шаблон

<?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>

Результат

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

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

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

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

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

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

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

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

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

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

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

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

В Zend Framework все еще есть много помощников, таких как помощник i18n, помощники по формам, помощники по разбиению на страницы, помощники по навигации и т. Д.

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

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

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

  • Шаг 1 — Расширение класса Zend \ View \ Helper \ AbstractHelper.

  • Шаг 2 — Переопределите функцию __invoke () .

  • Шаг 3 — Установите конфигурацию в файле module.config.php .

  • Шаг 4 — Использование помощника вида в скриптах вида.

Шаг 1 — Расширение класса Zend \ View \ Helper \ AbstractHelper.

Шаг 2 — Переопределите функцию __invoke () .

Шаг 3 — Установите конфигурацию в файле module.config.php .

Шаг 4 — Использование помощника вида в скриптах вида.

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

Создайте папку Helper в каталоге myapp / module / Tutorial / src / View . Напишите 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 .