8fold/php-html-component

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

一个轻量级的类,可以交付单个网页组件、元素或整个页面。

v3.0.1 2019-08-27 00:41 UTC

This package is auto-updated.

Last update: 2020-04-19 20:57:55 UTC


README

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

8fold 组件

一个轻量级类,用于生成预定义的 HTML 或自命名网页组件。

在开发我们各种在线应用程序的用户界面时,我们成功地将生成 HTML 元素、网页组件和完整内容页面的基本逻辑进行了整合。这种整合导致了我们创建了一个单一的轻量级类,我们称之为 8fold 组件,可在 PackagistGitHub 上找到。

它是我们其他网页用户界面软件包以及所有我们网站的骨架。

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>

组件类唯一提出的观点是元素的主要识别属性的顺序,顺序如下

  1. 元素,
  2. 扩展(is),
  3. 角色。

之后,属性将按照接收的顺序出现。然后处理内容。最后,如果有适用,则添加一个结束标签。

扩展

组件类旨在扩展,以减少复杂性,创建更多复合元素和组件。建议您同时扩展 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
  {
    ...
  }
}

但您做您需要做的事情!也许我们可以了解一下。