tuum/view

不转义的原始PHP模板渲染器。

1.0.0 2015-11-20 02:20 UTC

README

Scrutinizer Code Quality

一个基于原始PHP的模板,具有部分、块和布局,但没有 转义函数

要转义模板中显示的值,请使用其他包,例如 Tuum/Form

许可证

MIT 许可证

PSR

PSR-1, PSR-2, 和 PSR-4。

入门

安装

composer require "tuum/view: ^1.0"

示例代码

构建渲染器

$view = new Tuum\View\Renderer(
    new Tuum\View\Locator('/path/to/view/')
); // or alternatively,
$view = Tuum\View\Renderer::forge('/path/to/view');

要渲染PHP模板文件,

$view->render('my/file-name', [ 
  'some' => 'data' 
]);

位于 /path/to/view/my/file-name.php 的模板文件可能是

<html>
Some=<?= $some; ?>
</html>

Tuum/View 不会转义值。请在显示值之前使用助手函数进行转义。

使用布局

您可以在渲染器中设置默认布局

$viewer = $viewer->setLayout('layout/layout1');
$viewer->render('file-name', [ 
  'some' => 'data' 
]);

或在单个模板文件内设置布局(因此会覆盖默认布局)

<?php
$this->setLayout('layout/layout1');
?>
set layout inside this view.

布局文件

在布局文件中,使用 $this->getContent() 方法输出内容(来自初始模板文件)。

This is layout#1.
<?= $this->section-getContent(); ?>

End of layout#1.

使用部分

在模板文件中

在模板文件中,使用 $this->section->start()$this->section->saveAs('block') 定义一个部分

<?php $this-> section->start(); ?>

this is a block.

<?php $this->section->saveAs('block'); ?>

this is a content.

在布局文件中

在布局文件中,使用已定义的部分

Block:
<?= $this->section->get('block'); ?>

Content:
<?= $this->getContent(); ?>

Done:

您可以使用 replaceBy 方法检查一个部分是否已定义

<?php if ($this->section->exists('content')): ?>
    <?= $this->getContent(); ?>
<?php else: ?>
    Welcome Section Test
<?php endif; ?>

replaceBy 方法

在布局文件中使用 replaceBySection 可能会使它更清晰...

<?php $this->section->start(); ?>
    Welcome Section Test
<?php $this->section->replaceBy('content'); ?>

replacedBy 方法将从部分(从 start()replacedBy() 方法)输出内容,并检查是否存在具有该名称的部分。如果存在该部分,则输出现有部分,或输出布局中的部分。

在布局中禁用部分

在模板文件中,您可以使用 markNotToRender 方法设置部分不显示。

在模板文件中

<?php $this->section->markNotToRender('bread'); ?>

在布局文件中

<?php $this->section->start(); ?>
<ol>
    <li>bread-top</li>
    <?= $this->getSection('bread'); ?>
</ol>
<?php $this->section->renderAs('bread'); ?>

因为 bread 部分被标记为 NotToRender,所以整个面包部分将不会渲染。

这也适用于 replaceBySection。因此,对于 replaceBySection('content') 的示例,如果标记为 NoDisplay,则不会显示。

使用块

要包含另一个模板,请在模板文件中使用 block 方法

<?= $this->block('block-sub', ['some' =>'value']); ?>

block-sub 是另一个模板文件。模板的数据与块模板共享。

blockAsSection 方法

有时,您可能希望将块用作部分(嗯,我确实这样做了)。所以,这里有一个简单的方法来实现这一点。

<?php $this->blockAsSection('block-file', 'section-name', ['another' => 'one']); ?>