Содержание
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 &lt;b&gt;beer&lt;/b&gt; on the wall. &lt;script&gt;alert(1);&lt;/script&gt;
Это также работает с массивами и свойствами объекта:
$myArray = array('<b>foo</b>',array('<script>alert(1)</script>'),'key'=>'<i>foo</i>'); print_r($view->esc($myArray)); /* [0] => &lt;b&gt;foo&lt;/b&gt; [1] => Array ( [0] => &lt;script&gt;alert(1)&lt;/script&gt; ) [key] => &lt;i&gt;foo&lt;/i&gt; */ $myObj = new stdClass(); $myObj->title = '<h1>Hello World</h1>'; var_dump($view->esc($myObj)); /* object(stdClass)#23 (1) { ["title"] => string(32) "&lt;h1&gt;Hello World&lt;/h1&gt;" } */
Если системная переменная ESCAPE включена (по умолчанию), то каждый доступ к ключу hive с использованием токена шаблона, такого как
{{@myContent}}
автоматически экранируется этой функцией. Если это нежелательно, загляните в раздел шаблонов для изучения дополнительных постпроцессоров.
raw
Декодировать объекты HTML в эквивалентные символы
string raw ( mixed $arg )
Пример:
$view->raw("99 bottles of &lt;b&gt;beer&lt;/b&gt; on the wall. &lt;script&gt;alert(1);&lt;/script&gt;"); // 99 bottles of <b>beer</b> on the wall. <script>alert(1);</script>
Этот метод также обрабатывает элементы вложенного массива и свойства объектов, как $view→esc().