8fold/php-markup

此包已被弃用且不再维护。未建议替换包。

8fold Markup旨在使编写半结构化数据更简单,同时允许更多动态性。

0.9.5 2021-09-21 00:16 UTC

README

8fold Markup不是一个类似于XML、HTML、YAML和其他ML的新标记格式;相反,它是一个使用PHP生成这些(XML和HTML)的库。

它使用与8fold Shoop中找到的类似API来创建库间的连贯性。

安装

composer require 8fold/php-markup

使用

$element = Element::fold("hello");

print $lement->unfold();

// output: <hello></hello>

您也可以直接输出字符串。

$element = Element::fold("hello");

print $element;

// output: <hello></hello>

您可以为元素添加属性。

$element = Element::fold("hello")->attr("id my-element");

print $element;

// output: <hello id="my-element"></hello>

您可以从HTML开始,HTML是自知的(理解和遵守W3C HTML规范)。

如果HTML元素未知,Markup将回退到使用Element。

$html = Html::p();

print $html->unfold();

print $html;

有两种方法可以创建更复杂的元素(或现在的组件)。第一个例子使用Html,而第二个使用UIKit

如果UIKit组件未知,它将回退到Html

$html = Html::ul(
  Html::li("Hello, "),
  Html::li("World!")
);

print $html;

// output:
// <ul><li>Hello, </li><li>World!</li></ul>

$uikit = UIKit::listWith(
  "Hello, ",
  "World!"
);

print($uikit);

// output: same as above

为什么?

在半结构化数据方面,XML及其衍生品可能很繁琐且语法复杂。8fold Markup使输出半结构化数据变得更容易,并允许更多动态性。

Markup最小化了输出,使传输的数据包更小、更快。

Markup更喜欢一个I/O步骤来编译(展开)生成的纯文本,这意味着没有解析字符串即可得到所需输出。

在HTML方面,属性将保持一致排序,并且如果给定属性不是W3C HTML5规范的一部分或对该元素已弃用,它将自动被删除;无需重写大量HTML模板即可保持您的标记更新。

指导原则

最小化I/O,同时最大化灵活性和可扩展性。

标准化HTML输出,并允许用户设置自己的标准。

简化复杂但常见的元素(UIKit)的创建。

治理

  • 问题编号越高,优先级越高(问题标签)。
  • 现在为仁慈的独裁统治。

贡献

任何人都可以提交PR来添加功能,因为我们只添加我们为正在开发的解决方案所需的功能。

每个PR都将被审查,包括核心开发者提交的(不允许直接推送)。

版本控制

我们遵循语义化版本控制。当前我们处于零主版本号状态。x.y.z:其中x为主版本号,y为次版本号,z为补丁版本号。在这种情况下,x保持为0,以表明API可能会随时新增或删除。话虽如此,对y的更改通常保留用于重大更改,而对z的更改则代表新增功能、API或错误修复。

历史

这个库最初是由三个(或更多)独立库组成的,每个库的稳定性程度不同。

Element的版本为3.0.1;Html的版本也是3.0.1;UIKit之前从未公开发布。

这个库取代了那三个库,并在过程中弃用了它们。(其他库和项目的弃用期限将在2021年1月1日或之后结束。)