germania-kg/renderer

为PHP文件、Twig、Smarty和Markdown渲染可调用对象

3.0.4 2022-05-30 13:50 UTC

README

为PHP文件、Twig、Smarty和Markdown渲染可调用对象

Packagist PHP version Build Status Scrutinizer Code Quality Code Coverage Build Status

使用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