rebelcode / tree-rendering
用于渲染树和其他类似层次结构的PHP库。
dev-develop / 0.1.x-dev
2018-12-10 15:44 UTC
Requires
- php: ^5.4 | ^7.0
- dhii/i18n-helper-base: ^0.1-alpha1
- psr/container: ^1.0
Requires (Dev)
- codeclimate/php-test-reporter: <=0.3.2
- dhii/data-container-base: ^0.1-alpha2
- dhii/php-cs-fixer-config: ^0.1
- phpunit/phpunit: ^4.8
This package is auto-updated.
Last update: 2024-09-11 04:18:39 UTC
README
一个轻量级的PHP库,用于渲染树和其他类似层次结构。
要求 🛠
PHP 5.4 或更高版本。
安装 ⬇
composer require rebelcode/tree-rendering
特性 ⭐
- 简单直观的接口
- 轻量级实现,开销最小化
- 主从模式,用于简单的节点渲染和委派
- 适用于树、嵌套结构和其他类似的层次数据结构
工作原理 📖
通过一个容器实例化一个主渲染器实例,该容器包含从渲染器。此渲染器作为所有渲染的主要入口点。
$renderer = new MasterTreeRenderer(new Container([ 'slave_1' => new MySlaveRenderer(), // ... ]));
当调用主渲染器的 render()
方法时,主渲染器将使用节点的 渲染类型 字符串来确定应使用哪个从渲染器进行渲染。然后选择的从渲染器被通知 render()
节点,接收节点和主渲染器作为参数。
从渲染器不需要知道如何渲染整个节点/子树,可以使用主渲染器引用(作为第二个参数接收)将某些渲染委派给其他从渲染器。从渲染器可以选择请求主渲染器以不同的渲染类型处理节点。
class MySlaveRenderer implements SlaveTreeRendererInterface { public function render(RenderNodeInterface $node, TreeRendererInterface $master) { if (! $node instanceof UserNodeInterface) { throw new InvalidArgumentException(); } $name = $node->getName(); $friends = $node->getFriends(); // Delegate back to the master renderer, using `user_list` as the render type $list = $master->render($friends, 'user_list'); return sprintf('[%s] %s', $name, $list); } }