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