8fold/php-html

此包已被废弃且不再维护。作者建议使用8fold/php-markup包。

一个用于在PHP项目中生成HTML字符串的库。

3.0.1 2019-08-31 20:27 UTC

README

替代: https://github.com/8fold/php-markup

8fold Elements

我们从现代Web中汲取了许多灵感,并将其转化为通用的概念和特定实现;即,Web组件HTML5规范。我们还从详情中获得了某些哲学上的启发。

Elements利用8fold Component为您提供了一个轻量级的库来

  1. 生成您自己的Web组件,
  2. 从HTML规范生成所有元素,
  3. 确保您的元素只具有根据规范对元素有效的属性,
  4. 确保您的元素属性具有一致且合理的顺序,以及
  5. 验证元素父子关系的有效性。

Composer

$ composer require 8fold/php-html

用法

Html::h1(Component::text('Hello!'))
  ->attr('class content-lead');

输出

<h1 class="content-lead">
    Hello!
</h1>

更多详情请参阅8fold Component

您调用的方法是要使用的HTML主元素,从那里开始,就由您来决定了。

为什么?(简短的版本。)

超级超级短:编写HTML既不闪亮也不性感,但也不容易。

我们创建这个库的目的是要解决一些具体的问题。

  1. 编写HTML是一项相当繁琐的任务。这就是为什么我们(开发者)创建了所有那些模板引擎,允许我们重用HTML片段。这也是为什么w3c和其他人正在开发Web组件库;用于在任何Web应用程序中使用的HTML、CSS和交互式脚本的直接可重用片段。
  2. 模板引擎有效地解决了重用问题,但并没有解决HTML问题。也就是说,有很多规则和写HTML的方式。一些团队试图通过创建每个人都应该遵守的编码风格指南来解决此问题,这对于提高可读性非常有用,但您仍然需要了解这种风格并遵守它。
  3. 从某种意义上说,W3C的HTML规范 相当于 一份样式指南,但实际上,我们很多人并没有认真阅读(甚至有些人根本不知道它的存在)。它告诉我们哪些元素存在,它们可以有哪些属性,可以响应哪些事件,可以有哪些ARIA角色,以及与这些角色相关联的ARIA属性。哦,还有哪些元素可以作为其他元素的父元素或子元素。

8fold Elements旨在(并且已经)解决(一些)这些问题。

它将属性按常见内容、事件、ARIA、其他和布尔值进行分组。常见内容属性包括“id”、“class”等。它将根据元素的规范过滤出不适用的属性。并且准备以更高的速度做更多的事情...

“以更高的速度”这部分非常重要。鉴于这个库本身不被视为模板引擎,你可能会将其与模板引擎结合使用,构建一个扩展,或者两者都使用。因此,它必须尽可能快。

扩展

如果你决定创建一个扩展库,就像我们所做的那样,建议你扩展根Html类,添加自己的元素。这样你就可以首先访问自己的元素,然后回退到8fold Elements(通用HTML)最终到8fold Component(通用Web组件)。

如果尽可能直接地调用元素(就像命名空间一样),它还可以帮助提高可读性。假设你有一个扩展,并使用MyComponents作为其前缀。你有一个名为my_component的元素,你需要它包含一个p段落和一个完整的Web组件my_web_component作为其内容。你可以(几乎)这样做

MyComponents::my_component(
      MyComponents::p(Component::text('Hello '))
    , MyComponents::my_web_component(Component::text('World!'))
]);

但是,我们发现这非常,非常令人困惑,因为它读起来就像所有东西都来自我们的库。相反,我们建议你这样做(这也会稍微快一点)

MyComponents::my_component([
      Html::p(Component::text('Hello, '))
    , Component::my_web_component(Component::text('World!'))
]);

对所有人来说都更容易理解。如果你有两个来自两个库的元素名称相同,这仍然可能会变得有些棘手。因此,我们建议,如果你创建自己的库,只需将所有内容都作为HTML元素的扩展即可。这样,所有你的组件都会像Web组件一样有前缀(my_)。

我们也在努力将我们的库转换为这种格式。