royallthefourth/html-document

用于构建HTML文档的面向对象工具

v1.0.7 2017-04-08 20:17 UTC

This package is auto-updated.

Last update: 2024-09-08 06:56:46 UTC


README

SensioLabsInsight Scrutinizer Code Quality

html-document 是一个用于构建HTML文档的面向对象工具。它旨在比标准的DOM实现更加实用,但它并不完全是一个按照教科书的DOM实现。

它做什么?

  • 提供所有标准HTML5元素作为类
  • 提供方法将这些元素组合成一个文档层次结构
  • 将元素层次结构渲染成单个字符串,以便输出到浏览器

它不做什么?

  • 对创建的文档进行任何验证(目前还不支持)
  • 防止XSS或其他注入相关攻击
  • 读取或操作已存在的文档

安装

使用 Composer 安装。将库添加到您的 composer.json

{
    "require": {
        "royallthefourth/html-document": "^1.0"
    }
}

然后安装

composer install --no-dev

此库没有依赖项。

示例

使用此库构建整个HTML文档或部分文档非常简单。看看

use RoyallTheFourth\HtmlDocument\Document;
use RoyallTheFourth\HtmlDocument\Element\Body;
use RoyallTheFourth\HtmlDocument\Element\Head;
use RoyallTheFourth\HtmlDocument\Element\Html;
use RoyallTheFourth\HtmlDocument\Element\Paragraph;
use RoyallTheFourth\HtmlDocument\Element\Text;
use RoyallTheFourth\HtmlDocument\Element\Title;

echo (new Document())
    ->add((new Html())
        ->withChild((new Head())
            ->withChild((new Title())
                ->withChild(new Text('HTML Document'))
            )
        )
        ->withChild((new Body())
            ->withChild((new Paragraph())
                ->withChild(new Text('Build a whole document at once like this, or piece existing parts together'))
            )
        )
    )->render();

这返回一个完整的HTML页面作为字符串

<!DOCTYPE html>
<html>
<head>
<title>
HTML Document
</title>

</head>

<body>
<p>
Build a whole document at once like this, or piece existing parts together
</p>

</body>

</html>

当然,您不太可能想以这种方式在原地构建整个文档。此库背后的真正想法是允许对象将自己表示为页面上的元素。例如,您可能有一个可以接受一个 Layout 对象以提供表现行为的对象。注入一个 TableRowLayout 对象将提供布局对象的行为,而不会破坏封装。现在,您的对象可以表示为 <tr>,而无需模板引擎、公共属性或getter方法。采用这种方法,精心设计的对象系统可以直接生成最终的HTML文档。请参阅 我的博客 以获取更详细的示例。

与通常的HTML文档概念的一个重要区别是,这些元素没有值。相反,库提供了一个特殊的元素类型 Text,可以在任何具有开闭标签的节点中放置任意文本。

还有 ArbitraryArbitraryEmpty 元素,以防您需要非标准元素。这两个元素之间的唯一区别是,Arbitrary 有一个闭合标签,而 ArbitraryEmpty 没有闭合标签。例如,<br> 可以实现为一个 ArbitraryEmpty

有关更多示例,请参阅 tests 目录。我的意图是使此库非常简单易懂。

安全

此库 根本不 对输入进行清理。将您传递给此库的所有内容都视为将直接输出到页面上。应该使用 htmlspecialchars() 来防止出现任何不需要的标记。

如果我在这方面有任何误解,请立即通知我。

贡献

欢迎提交错误报告、错误修复、测试和文档。如果库中缺少或过时的内容,我很乐意将其更新到标准。如果是简单的错误修复,请直接提交拉取请求。请包括暴露错误的测试以及您的错误修复。

对于更复杂的问题,请先提交一个问题,以便我们讨论如何处理。