royallthefourth / html-document
用于构建HTML文档的面向对象工具
Requires
- php: ^7
Requires (Dev)
- phpunit/phpunit: ^5.6
This package is auto-updated.
Last update: 2024-09-08 06:56:46 UTC
README
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
,可以在任何具有开闭标签的节点中放置任意文本。
还有 Arbitrary
和 ArbitraryEmpty
元素,以防您需要非标准元素。这两个元素之间的唯一区别是,Arbitrary
有一个闭合标签,而 ArbitraryEmpty
没有闭合标签。例如,<br>
可以实现为一个 ArbitraryEmpty
。
有关更多示例,请参阅 tests
目录。我的意图是使此库非常简单易懂。
安全
此库 根本不 对输入进行清理。将您传递给此库的所有内容都视为将直接输出到页面上。应该使用 htmlspecialchars()
来防止出现任何不需要的标记。
如果我在这方面有任何误解,请立即通知我。
贡献
欢迎提交错误报告、错误修复、测试和文档。如果库中缺少或过时的内容,我很乐意将其更新到标准。如果是简单的错误修复,请直接提交拉取请求。请包括暴露错误的测试以及您的错误修复。
对于更复杂的问题,请先提交一个问题,以便我们讨论如何处理。