8fold/php-html-builder

用于构建 HTML 文档和元素字符串的库。

2.4.0 2023-04-30 18:51 UTC

This package is auto-updated.

Last update: 2024-09-27 01:16:55 UTC


README

HTML Builder 扩展并实现了 8fold XML Builder,类似于 HTML 扩展并作为 XML 的具体实现。这类似于 HTML 如何扩展并成为 XML 的具体实现。

安装

composer require 8fold/php-html-builder

使用(基本)

警告:此库的用户负责对内容进行清理。

默认情况下,HTML Builder 可以快速输出具有元素属性一致排序的 HTML 字符串。默认顺序可以在 Element 类中找到,如果您希望有不同的排序,则可以覆盖它。这有助于创建和保持一致的 HTML 模式。此外,无需更新模板或其他代码即可更改此模式。

use Eightfold\HTMLBuilder\Document;
use Eightfold\HTMLBuilder\Element;

Document::create('title')
  ->head(
    Element::link()
      ->omitEndTag()->props('rel stylesheet', 'href style.css'),
    Element::script()->props('src script.js')
  )->body(
    Element::p('paragraph content')
  )

输出

<!doctype html>
<html lang="en"><head><title>title</title><meta charset="utf-8"><link rel="stylesheet" href="style.css"><script src="script.js"></script></head><body><p>paragraph content</p></body></html>

格式化输出

<!doctype html>
<html lang="en">
  <head>
    <title>title</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>
  <body>
    <p>paragraph content</p>
  </body>
</html>

更多示例可以在 tests 文件夹中找到,包括示例扩展。

关于属性的一则说明:如果属性不在有序列表中,并且属性的值与属性名称相同,HTML Builder 将假设它是一个布尔值,并在 HTML 输出中截断定义。

Element::input()->omitEndTag()->props("required required");

输出

<input required>

性能

可以使用 /comparisons 文件夹在本地运行性能测试,比较使用以下方法生成的相同输出:

  1. 直接 HTML,
  2. 标准 PHP,
  3. PHP HTML Builder 与标准 PHP(Element 类),
  4. 仅 PHP HTML Builder(Document 类),以及
  5. 仅使用 PSR-4 自动加载的 PHP HTML Builder。

这些结果来自 2024 年 2 月 26 日

值得注意的事项(作为粗略的解释)

  1. 将 PHP 用作模板引擎对速度的影响可以忽略不计。
  2. 不使用 PSR-4 自动加载的情况下使用 require_once 会将速度降低约 1.5 毫秒;然而,一旦代码可用,似乎就不会有额外的成本。
  3. 使用 PSR-4 会将速度降低约 6 毫秒;然而,确保一切都在且可用。
  4. 使用 PHP HTML Builder Document 和 Element 类可导致数据包大小减少 1 千字节。(很可能是由于处理时间增加而抵消了下载时间减少。)

详细信息

有关详细信息,请参阅 8fold XML Builder

其他