windwalker / view
Windwalker View 包
2.1.9
2016-02-12 15:36 UTC
Requires
- php: >=5.3.10
Requires (Dev)
- windwalker/registry: ~2.0
- windwalker/renderer: ~2.0
- windwalker/test: ~2.0
Suggests
- windwalker/registry: Install 2.* if you want to use JsonView.
- windwalker/renderer: Install 2.* if you want to use HtmlView to render page.
README
通过 Composer 安装
将此添加到您的 composer.json
文件中的 require 块。
{ "require": { "windwalker/view": "~2.0" } }
创建一个简单的视图
AbstractView
AbstractView
非常简单,只需要一个 render 方法来渲染您想要的。
use Windwalker\View\AbstractView; class MyView extends AbstractView { public function render() { $tmpl = <<<TMPL # The is a Markdown Article Hello %s~~~! TMPL; return MyMarkdown::render(sprintf($tmpl, $this->data['foo'])); } } // Create view and set data $view = new MyView; $view->set('foo', 'World'); $view->render();
结果将是
<h1>The is a Markdown Article</h1> Hello World~~~!
SimpleHtmlView
SimpleHtmlView
可以设置一个 PHP 文件来渲染
use Windwalker\View\SimpleHtmlView; class MyHtmlView extends SimpleHtmlView { public function prepare($data) { // Format dome data $data['time'] = $data['time']->format('Y-m-d H:i:s'); $data['link'] = '/flower/' . OutputFilter::stringUrlSafe($data['name']) . '.html'; } } $view = new MyHtmlView; $view->set('time', new DateTime); $view->set('name', $name); $view->setLayout('/path/to/template.php')->render();
模板文件
<?php $time = $data['time']; ?> <p> Now is: <?php echo $this->escape($time); ?> I'm: <a href="<?php echo $data['link'] ?>"> <?php echo $this->escape($data['name']); ?> </a> </p>
HtmlView
HtmlView
比起 SimpleHtmlView
更强大,我们可以将其设置为渲染引擎,并在多个路径中查找模板。
use Windwalker\View\HtmlView; $paths = new SplPriorityQueue; $paths->insert('path/of/system', 300); $paths->insert('path/of/theme', 500); $data = array( 'time' => new DateTime ); $view = new HtmlView($data, new PhpRenderer($paths)); $view->setLayout('foo')->render(); // Will find foo.php in every paths.
扩展它
use Windwalker\View\HtmlView; use Windwalker\Renderer\BladeRenderer; // A Blade View class BladeHtmlView extends HtmlView { public function __construct($data = array(), BladeRenderer $renderer = null) { $renderer = $renderer ? : new BladeRenderer('default/path', array('cache_path' => 'cache/path')) parent::__construct($data, $renderer); } } // View for different MVC structures class ArticleHtmlView extends BladeHtmlView { public function prepare($data) { $data['time'] = $data['time']->format('Y-m-d H:i:s'); } } $view = new MyHtmlView; $view->['time'] = new DateTime; // Use array access $view->setLayout('template')->render(); // Will find template.blade.php
数据对象
HtmlView 使用 Windwalker\Data\Data
作为数据存储,我们不需要担心数据是否存在。
<?php $time = $data['time']; // Exists $name = $data['name']; // Not exists, just return null. $title = $data->title; // Also support object access.
JsonView
JsonView 使用注册表作为数据存储,我们可以通过点号(.)来区分不同层级。
$view = new JsonView; $view['foo.bar'] = 'baz'; $view->render();
结果将是
{ "foo": { "bar": "baz" } }