View

View - это класс, отвечающий за визуализацию представлений PHP (на языке MVC).

Пространство имен: \

Расположение файла:lib/base.php

Что такое View?

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

Например, давайте рассмотрим, как вы можете создать карту сайта на традиционном PHP:

// first we generate the list of URLs (Web pages)
$urls=array('http://domain.tld/home','http://domain.tld/contact','http://domain.tld/about');
 
// at the end of the code, we display the list as an HTML view:
header('Content-Type: text/html; charset=UTF-8');
echo "<html><table><tr><td>$urls[0]</td></tr><tr><td>$urls[1]</td></tr><tr><td>$urls[2]</td></tr></table></html>";
 
// or as a XML view:
header('Content-Type: text/xml; charset=UTF-8');
echo "<?xml><urlset><url><loc>$urls[0]</loc></url><url><loc>$urls[1]</loc></url><url><loc>$urls[2]</loc></url></urlset>";
 
// or as a CSV view:
header('Content-Type: text/csv; charset=UTF-8');
echo implode("\r\n",$urls);

Ренднринг View

Класс View позволяет легко разделить два описанных выше шага, поскольку он требует файла представления и данные из hive:

string render ( string $file [, string $mime = 'text/html' [, array $hive = NULL, [ int $ttl = 0 ]]] )

Примечание: аргумент $mime отвечает за создание надлежащего заголовока. Если данные не предоставлены, используется глобальный hive F3.

Вот как использовать его в обработчике маршрута с помощью hive:

$f3->set('urls',
    array(
        'http://domain.tld/home',
        'http://domain.tld/contact',
        'http://domain.tld/about'
    )
);
$view=\View::instance();
echo $view->render('myview.html','text/html');
// or
echo $view->render('myview.xml','text/xml');
// or
echo $view->render('myview.csv','text/csv');

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

$urls=array('http://domain.tld/home','http://domain.tld/contact','http://domain.tld/about');
$view=\View::instance();
echo $view->render('myview.html','text/html',array('urls'=>$urls));
// or
echo $view->render('myview.xml','text/xml',array('urls'=>$urls));
// or
echo $view->render('myview.csv','text/csv',array('urls'=>$urls));

Текст в myview.html

<html>
<head>
...
</head>
<body>
<table>
<?php foreach($urls as $url):?>
  <tr>
    <td>
      <?php echo $url;?>
    </td>
  </tr>
<?php endforeach;?>
</body>
</html>
 

Текст в myview.xml

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php foreach($urls as $url):?>
  <url>
    <loc>
      <?php echo $url;?>
    </loc>
  </url>
<?php endforeach;?>
</urlset>

Текст в myview.csv

<?php foreach($urls as $url):?>
<?php echo $url;?>
<?php endforeach;?>

Методы

afterrender

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

string afterrender ( string|callback $func )

Вызов функции, указанной в $func.

Когда функция вызывается, визуализированное представление передается в функцию в виде строки. Вызываемая функция должна возвращать измененное визуализированное представление после того, как какие-либо изменения были выполнены из функции обратного вызова.

esc

Кодировать символы в эквивалентные объекты HTML

string esc ( mixed $arg )

Применение:

echo $view->esc("99 bottles of <b>beer</b> on the wall. <script>alert(1);</script>");
// 99 bottles of &amp;lt;b&amp;gt;beer&amp;lt;/b&amp;gt; on the wall. &amp;lt;script&amp;gt;alert(1);&amp;lt;/script&amp;gt;

Это также работает с массивами и свойствами объекта:

$myArray = array('<b>foo</b>',array('<script>alert(1)</script>'),'key'=>'<i>foo</i>');
print_r($view->esc($myArray));
/*
    [0] => &amp;lt;b&amp;gt;foo&amp;lt;/b&amp;gt;
    [1] => Array
        (
            [0] => &amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;
        )
    [key] => &amp;lt;i&amp;gt;foo&amp;lt;/i&amp;gt;
*/
 
$myObj = new stdClass();
$myObj->title = '<h1>Hello World</h1>';
var_dump($view->esc($myObj));
/*
    object(stdClass)#23 (1) {
      ["title"] => string(32) "&amp;lt;h1&amp;gt;Hello World&amp;lt;/h1&amp;gt;"
    }
*/

Если системная переменная ESCAPE включена (по умолчанию), то каждый доступ к ключу hive с использованием токена шаблона, такого как

 {{@myContent}} 

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

raw

Декодировать объекты HTML в эквивалентные символы

string raw ( mixed $arg )

Пример:

$view->raw("99 bottles of &amp;lt;b&amp;gt;beer&amp;lt;/b&amp;gt; on the wall. &amp;lt;script&amp;gt;alert(1);&amp;lt;/script&amp;gt;");
// 99 bottles of <b>beer</b> on the wall. <script>alert(1);</script>

Этот метод также обрабатывает элементы вложенного массива и свойства объектов, как $view→esc().

Печать/экспорт