lorenzoferrarajr/lfj-zfrenderer

一个使用 Zend Framework 2 PhpRenderer 渲染 PHP 视图脚本的实用工具

dev-no-shared-events / 0.0.x-dev 2016-12-13 20:20 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:49:13 UTC


README

一个使用 Zend Framework 2 PhpRenderer 渲染 PHP 视图脚本的库

Build Status

警告:此库处于开发阶段。如果您想尝试使用它,请指定提交哈希值。

安装

建议的安装方法是通过 composer

composer require lorenzoferrarajr/lfj-zfrenderer

不可变性

Lfj\ZfRenderer\Renderer 类实例化的对象是不可变的。

例如,以下代码用于将自定义的 HelperPluginManager 实例添加到 $renderer 对象中

$helperPluginManager = new \Zend\View\HelperPluginManager();
$helperPluginManager->setService('name', new PrintName());

$renderer = new \Lfj\ZfRenderer\Renderer();
$rendererNew = $renderer->withHelperPluginManager($helperPluginManager);

调用 $renderer->withHelperPluginManager($helperPluginManager); 不会影响 $renderer 对象。相反,它将返回一个包含指定 $helperPluginManager$renderer 的克隆对象。

使用方法

术语 模板视图脚本 可以互换使用。

模板是混合了 HTML 和 PHP 的 PHP 脚本。

渲染简单模板

这是 view/hello-world.phtml 视图脚本。其中不包含 PHP 代码

<!-- view/hello-world.phtml-->
Hello, World!

要渲染模板,必须将视图脚本文件的路径作为 render 方法的第一个参数传递

$template = realpath('view/hello-world.phtml');

$renderer = new \Lfj\ZfRenderer\Renderer();

/** @var \Zend\View\View $view */
$view = $renderer->render($template);

echo $view->getResponse()->getContent();

render 方法返回一个 \Zend\View\View 实例。内容可以通过 $view->getResponse()->getContent() 获取。

向模板传递数据

模板可以利用变量中包含的数据。这是一个示例

<!-- view/hello-name.phtml -->
Hello, <?=$name?>!

要将数据传递给视图脚本,必须将关联数组作为 render 方法的第二个参数提供

$template = realpath('view/hello-name.phtml');

$renderer = new \Lfj\ZfRenderer\Renderer();
$view = $renderer->render($template, array('name' => 'World'));

echo $view->getResponse()->getContent();

包含部分

在另一个视图脚本中包含其他视图脚本可能很有用。这可以通过将模板路径解析器列表传递给 withResolvers 方法来实现。该方法返回一个新的 $renderer 实例。

这是包含部分的 view/hello-partial.phtml 视图脚本

Hello, <?=$this->partial('partial/name.phtml', array('name' => $name))?>!

以及这是 partial/name.phtml 文件

<?=$name?>

渲染整个内容的代码如下

$template = realpath('view/hello-partial.phtml');

$templatePathStack = new \Zend\View\Resolver\TemplatePathStack();
$templatePathStack->addPath(realpath('view'));

$renderer = new \Lfj\ZfRenderer\Renderer();
$renderer = $renderer->withResolvers(array($templatePathStack));

$renderedContent = $renderer->render(
    $template,
    array('name' => 'World')
);

echo $renderedContent->getResponse()->getContent();

$templatePathStack 对象是包含其他视图脚本的可能目录列表。

添加助手

可以通过使用 setHelperPluginManager 方法注入 Zend\View\HelperPluginManager 实例来添加助手。

以下视图脚本使用了 name 助手。

Hello, <?=$this->name()?>!

当调用 $this->name() 时,将使用以下 PrintName 类的实例

use Zend\View\Helper\AbstractHelper;
use Zend\View\Helper\HelperInterface;

class PrintName extends AbstractHelper implements HelperInterface
{
    public function __invoke()
    {
        echo "World";
    }
}

将所有这些组合在一起的代码如下

$template = realpath('view/hello-helper.phtml');

$helperPluginManager = new \Zend\View\HelperPluginManager();
$helperPluginManager->setService('name', new PrintName());

$renderer = new \Lfj\ZfRenderer\Renderer();
$renderer = $renderer->withHelperPluginManager($helperPluginManager);
$renderedContent = $renderer->render(
    $template
);

echo $renderedContent->getResponse()->getContent();