lorenzoferrarajr / lfj-zfrenderer
一个使用 Zend Framework 2 PhpRenderer 渲染 PHP 视图脚本的实用工具
Requires
- php: >=5.5
- zendframework/zend-filter: 2.5.*
- zendframework/zend-servicemanager: 2.5.*
- zendframework/zend-view: 2.5.*
Requires (Dev)
- phpunit/phpunit: ~4.6
This package is not auto-updated.
Last update: 2024-09-28 17:49:13 UTC
README
一个使用 Zend Framework 2 PhpRenderer 渲染 PHP 视图脚本的库
警告:此库处于开发阶段。如果您想尝试使用它,请指定提交哈希值。
安装
建议的安装方法是通过 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();