danleech/ object-renderer
渲染/美化打印对象
0.1.1
2021-01-31 18:57 UTC
Requires
- php: ^7.3 || ^8.0
- psr/container: ^1.0@dev
- twig/twig: ^2.0||^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15.0
- phpactor/test-utils: ^1.1
- phpstan/phpstan: ^0.12.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-02 10:32:18 UTC
README
渲染 / 使用 Twig 模板美化打印对象。
- 根据全限定名(FQN)选择模板。
- 基于类层次结构回退模板。
- 模板可以渲染对象。
此库或类似库可能适合以下用途:
- 美化打印
ReflectionClass
及其相关对象,例如在语言服务器中打印格式化文档。 - 基于 对象 构建内容管理系统(CMS)。
- 其他用途。
渲染对象
创建渲染器并渲染对象
$renderer = ObjectRendererBuilder::create() ->addTemplatePath('example/path') ->build(); $renderer->render(new \stdClass());
将抛出异常
Could not render object "stdClass" using templates "stdClass.twig"',
你可以猜测你需要做什么,在构建器给出的路径中创建 stdClass.twig
# stdClass.twig
Hello I am a stdClass
对象属性和递归渲染
对象在模板中可用为 object
。
如果对象包含其他对象,你可以通过调用 render(object.anotherObject)
递归渲染它们。
祖先类模板解析
如果找不到给定对象的类模板,渲染器将尝试为每个父类找到模板。
DOMDocument 示例
{# DOMDocument.twig #}
DOMDocument:
{% for node in object.childNodes %}
- {{ render(node) }}
{%- endfor -%}
{# DOMElement.twig #}
Element: "{{ object.nodeName }}"
{% for attribute in object.attributes %}
{{ render(attribute) }}
{%- endfor -%}
{# DOMAttr.twig #}
{{ object.name }}: {{ object.value }}
按照以下方式渲染
$dom = new DOMDocument(); $child1 = $dom->createElement('child-1'); $child1->setAttribute('foo', 'bar'); $dom->appendChild($child1); $child2 = $dom->createElement('child-2'); $child2->setAttribute('bar', 'foo'); $dom->appendChild($child2); $renderer = ObjectRendererBuilder::create() ->addTemplatePath('example/path') ->build(); $renderer->render($dom);
应返回类似以下内容
DOMDocument:
- Element: "child-1"
foo: bar
- Element: "child-2"
bar: foo