germania-kg / renderer
为PHP文件、Twig、Smarty和Markdown渲染可调用对象
3.0.4
2022-05-30 13:50 UTC
Requires
- php: ^7.3|^8.0
- psr/http-message: ^1.0
- psr/log: ^1.0
Requires (Dev)
- cebe/markdown: ^1.2
- php-coveralls/php-coveralls: ^2.0
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.0
- smarty/smarty: ^3.1
- twig/twig: ^2.0|^3.0
Suggests
- cebe/markdown: Nice Markdown parser
- smarty/smarty: Just in case you miss it
- twig/twig: The template engine of choice.
README
为PHP文件、Twig、Smarty和Markdown渲染可调用对象
使用Composer安装
$ composer require germania-kg/renderer
"require": { "germania-kg/renderer":"^1.0|^2.0|^3.0" }
germania-kg/renderer v3版本支持Twig v2和v3.
用法
所有类 PhpRenderer, TwigRenderer, RenderedMarkdownRenderer, 和 SmartyRenderer 继承自 \Germania\Renderer\RendererAbstract
并实现了 RendererInterface
interface RendererInterface { /** * @param string $template The template file * @param array $context Associative template variables array * @return string Template output */ public function render( $template, array $context = array()) : string /** * Callable alias for render() */ public function __invoke( $template, array $context = array()) }
PhpRenderer
这个 RendererInterface 实现将包括一个PHP文件,使用输出缓冲区。传入的上下文变量会被提取到 __invoke 方法作用域内,因此可以在PHP包含文件内部局部访问。
<?php use Germania\Renderer\PhpRenderer; // Base path and PSR-3 Logger are optional. // Base path defaults to PHP's getcwd() $php = new PhpRenderer; $php = new PhpRenderer( '/path/to/includes' ); $php = new PhpRenderer( array('/path/to/includes', '/another/path') ); $php = new PhpRenderer( '/path/to/includes', $logger ); // Pass file name and variable context: echo $php('myinc.php', [ 'foo' => 'bar', 'user' => $container->get('var') ]);
PSR-7 HTTP消息
如果包含文件本身返回一个PSR-7 ResponseInterface,则 PhpRenderer 将返回这个 ResponseInterface 实例。
<?php // myinc.php return $response;
<?php use Psr\Http\Message\ResponseInterface; $render = new PhpRenderer; $result = $render('myinc.php', [ 'response' => new GuzzleHttp\Psr7\Response ]); echo $result instanceOf ResponseInterface ? $result->getBody() : $result;
TwigRenderer
<?php use Germania\Renderer\TwigRenderer; // Have your Twig_Environment at hand; // Logger is optional. $render_twig = new TwigRenderer( $twig, $logger ) ; // Pass file name and variable context: echo $render_twig('mytwig.tpl', [ 'foo' => 'bar', 'user' => $container->get('var') ]);
SmartyRenderer
<?php use Germania\Renderer\SmartyRenderer; // Have your Smarty3 at hand; // Logger is optional. $render_smarty = new SmartyRenderer( $smarty ) ; $render_smarty = new SmartyRenderer( $smarty, $logger ) ; // Pass file name and variable context: echo $render_smarty('mysmarty.tpl', [ 'foo' => 'bar', 'user' => $container->get('var') ]);
RenderedMarkdownRenderer
有时在将markdown源代码'处理'之前,使用真实的模板引擎先进行markdown解析是很有用的。RenderedMarkdownRenderer 接收一个 RendererInterface 实例和Carsten Brandt的任何 cebe/markdown 风味。
<?php use Germania\Renderer\TwigRenderer; use Germania\Renderer\RenderedMarkdownRenderer; use cebe\markdown\Markdown; // Have a RendererInterface instance at hand, // as well as Carsten Brandt's Markdown Parser. $twig_render = new TwigRenderer( $twig, $logger ); $markdown = new Markdown; // Pass them to constructor: $rendered_markdown_renderer = new RenderedMarkdownRenderer($twig_render, $markdown); // Pass file name and variable context: echo $rendered_markdown_renderer('twigged_markdown.md', [ 'foo' => 'bar', 'user' => 'Joe' ]);
问题
…像往常一样,这里和那里有些文档缺失。请关注问题列表以获取最新信息。
开发
$ git clone https://github.com/GermaniaKG/Renderer.git
$ cd Renderer
$ composer install
单元测试
要么将 phpunit.xml.dist
复制到 phpunit.xml
并根据您的需求进行修改,要么保持原样。运行PhpUnit 测试或composer脚本如下:
$ composer test # or $ vendor/bin/phpunit