rebelcode/tree-rendering

用于渲染树和其他类似层次结构的PHP库。

dev-develop / 0.1.x-dev 2018-12-10 15:44 UTC

This package is auto-updated.

Last update: 2024-09-11 04:18:39 UTC


README

Build Status Code Climate Test Coverage Latest Stable Version

一个轻量级的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);
    }
}