8fold / php-html-component
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/phpunit: >=6.0
README
替代品: https://github.com/8fold/php-markup
8fold 组件
一个轻量级类,用于生成预定义的 HTML 或自命名网页组件。
在开发我们各种在线应用程序的用户界面时,我们成功地将生成 HTML 元素、网页组件和完整内容页面的基本逻辑进行了整合。这种整合导致了我们创建了一个单一的轻量级类,我们称之为 8fold 组件,可在 Packagist 和 GitHub 上找到。
它是我们其他网页用户界面软件包以及所有我们网站的骨架。
Composer
$ composer require 8fold/php-html-component
用法
调用组件类的静态函数。函数名很可能会成为组件的名称(因为函数名不应包含连字符,应使用下划线代替)。第一个参数将是其内容;您可以将其设置为 false
以设置自闭合元素。第二个参数是可选的,将变成一个扩展。
注意:8fold 组件是严格类型化的。因此,传递给 8fold 组件的所有内容都必须实现 Compile 接口,这意味着除非作为 Component::text
实例化,否则字符串字面量将失败。
Component::my_component( Component::text('Hello, World!') )->compile();
输出
<my-component> Hello, World! </my-component>
扩展已知元素
Component::my_component( Component::text('Hello, World!') )->extends('p') ->compile();
输出
<p is="my-component"> Hello, World! </p>
添加属性
Component::my_component( Component::text('Hello, World!') )->extends('p') ->attr('id something-unique') ->compile();
输出
<p is="my-component" id="something-unique"> Hello, World! </p>
组件类唯一提出的观点是元素的主要识别属性的顺序,顺序如下
- 元素,
- 扩展(
is
), - 角色。
之后,属性将按照接收的顺序出现。然后处理内容。最后,如果有适用,则添加一个结束标签。
扩展
组件类旨在扩展,以减少复杂性,创建更多复合元素和组件。建议您同时扩展 Component.php
(将其用作工厂)和 Instance/Component.php
(将其用作基类)。根组件类本质上是一个工厂(也可以看作是一个外观),它根据给定的规格创建并返回一个组件实例。
在创建扩展时,我们建议复制根 Component
入口点,然后创建您扩展的有效元素列表,并在不可用的情况下调用父类(我们发现这是处理继承和魔术方法的最简单方法)。这样,使用您扩展的开发者总是会得到一个组件。
// Eightfold\HtmlComponent\Component abstract class Component { public static function __callStatic(string $element, array $args) { ... } } // My\ComponentExtension\IsAwesome abstract class Component { public static function __callStatic(string $element, array $args) { $validElements = [ 'my_component' ]; if (in_array($element, $validElements)) { ... return ...; } return parent::$element($args); } }
然后您可以像平常一样扩展 Instance/Component.php
,使用您的 Component
工厂返回您自己的类的实例,这些实例可以利用 Instance\Component
。很可能会覆盖 Instance\Component
中的 compile
方法。
// My\ComponentExtension\Instance\IsAwesome use Eightfold\HtmlComponent\Instance\Component; abstract class IsAwesome extends Component { public function compile(...$attributes): string { ... } }
但您做您需要做的事情!也许我们可以了解一下。