View
Описание
Двухуровневый шаблонизатор (View- первый, Layout- второй) с нативным синтаксисом PHP, схож с Zend_View + Zend_Layout.
Настройки
Глобальных настроек нет
Использование
В контроллере назначаем переменный в шаблон с использованием метода assign() либо вернув массив переменных:
/** * @return void */ return function() { $this->assign('title', "Hello world"); return [ 'keywords' => ['hello', 'world'], 'description' => 'first message' ]; };
В шаблоне выводим данные:
<h2><?=$title?></h2> <p>Follows code works too</p> <h2><?=$this->title?></h2> <p><?=$description?></p>
Для экранирования данных используем глобальную функцию esc():
<p><?=esc($description)?></p>
Назначаем переменную в Layout:
return /** * @return Response */ function() { Layout::set('title', "Hello world"); };
Отключаем вывод из контроллера (отключаем и view и layout):
return function() { return false; };
Отключаем view (может понадобиться для backbone.js):
return function() { $this->disableView(); };
Отключаем layout:
return function() { $this->disableLayout(); };
Методы
-
toArray()- получение всех данных из View -
setFromArray(array $data)- добавление данных скопом во View -
resetArray()- очистка всех данных -
setPath($path)- путь к шаблонам -
setTemplate($file)- шаблон для отображения -
addPartialPath($path)- путь к шаблонам-помощникам -
render()- собственно метод который отвечает за вывод, он также вызывается в магических методах__toStringи__invoke
View Helpers
ahref
Синтаксис:
$this->ahref(\string $text, \string $href, array $attributes = [])
Создаёт ссылку <a>:
- если
$href == null, ссылка не будет построена - если ссылка является текущей, к классу ссылки будет прибавлен класс
on
<?=$this->ahref('Profile', '/users/profile/id/13', ['class'=>'button']);?> <a href="/users/profile/id/13" class="button">Profile</a>
Второй параметр может быть опциями для помощника вида url():
<?=$this->ahref('Profile', ['users', 'profile', ['id'=>13]], ['class'=>'button']);?> <a href="/users/profile/id/13" class="button">Profile</a>
baseUrl
Синтаксис:
$this->baseUrl($file = null)
Добавляет к переданному URL базовый URL системы, или просто возвращает baseUrl:
<base href="<?=$this->baseUrl()?>" /> <!-- or --> <img src="<?=$this->baseUrl('redactor/logo.png')?>" alt="Logo"/> <!-- by default baseUrl of system is equal to '/' --> <img src="/radactor/logo.png" alt="Logo"/>
controller
Синтаксис:
$this->controller(\string $controller = null)
Данный метод возвращает текущий контроллер, или сверяет текущий с запрашиваемым:
<?=$this->controller()?> index <?php if ($this->controller('index')) :?> Home Page <?php endif; ?>
dispatch
Синтаксис:
$this->dispatch(\string $module, \string $controller, $params = array())
Запускает указанный контроллер с перечисленными параметрами, при этом параметры переданные в массиве имеют приоритет над параметрами из запроса, параметры запроса будут так же доступны в объекте Request:
// pages/index view // url /pages/id/9 $this->dispatch('users', 'profile', ['id' => 42]); // users/profile controller $request->id == 42; $request->getQuery('id') == 9; // HTTP only
headScript
Синтаксис:
$this->headScript(\string $script = null)
Добавляет указанный скрипт в стек, дабы в дальнейшем вставить его в тег <head> шаблона.
Без параметров возвращает код тега <script> для вставки, и очищает стек.
Если Layout отсутствует (это может быть AJAX запрос), то вызов скрипта вернёт код тега <script>:
<!-- layout --> <head> <?=Layout::headScript()?> </head> <!-- view --> <?=$this->headScript('js/jquery.js')?> <?=$this->headScript('$.ready(function(){ // la-la-la })')?> <!-- result --> <head> <script src="js/jquery.js"></script> <script type="text/javascript"> <!-- $.ready(function(){ // la-la-la }) //--> </script> </head>
headStyle
Синтаксис:
$this->headStyle(\string $style = null, \string $media = 'all')
Назначение аналогично headScript, но применительно к CSS стилям.
module
Синтаксис:
$this->module($module = null)
Данный метод возвращает текущий модуль, или сверяет текущий с запрашиваемым:
<?=$this->module()?> forum <?php if ($this->module('forum')) :?> Our Forum <?php endif; ?>
partial
Синтаксис:
$this->partial(\string $template, $params = array())
Вывод другого шаблона внутри нашего:
<?php $this->partial('/partial/table.phtml', array('rows' => $data)) ?>
partialLoop
Синтаксис:
$this->partialLoop(\string $template, $data = [], $params = [])
Вывод другого шаблона в цикле, который бегает по массиву $data, ключ массива будет передан в качестве переменной $partialKey, значение массива в $partialValue
<?php $this->partialLoop('/partial/tr.phtml', $rows) ?>
script
Синтаксис:
$this->script(\string $src = null)
Формирует строку для подключения javascript-кода к HTML. Может подключать как внешние файлы, так и локальные, может оборачивать inline-скрипты:
<!-- view --> <?php $this->script('redactor/redactor.js'); $this->script(' require(["jquery", "bluz"], function($, bluz) { bluz.ready(function(){ $("'.$selector.'").redactor('.$settings.'); }); }); '); ?> <!-- result --> <script src="/redactor/redactor.js"></script> <script type="text/javascript"> <!-- require(["jquery", "bluz"], function($, bluz) { bluz.ready(function(){ $(".redactor").redactor({"autoresize":false}); }); }); //--> </script>
style
Синтаксис:
$this->style(\string $style, $media = 'all')
Аналогично помощнику script(), но уже касательно CSS.
url
Синтаксис:
$this->url(\string $module, \string $controller, array $params = [], boolean $checkAccess = false)
Формирует ссылку на указанный контроллер, согласно прописанных в системе роутов. Если указан флаг $checkAccess то так же проверяет доступ по правилам описанных в ACL, в случае, если нет доступа - вернёт null, что влияет на поведение помощника ahref, который в этом случае не построит ссылку.