nethead/markup

Laravel 中生成 HTML 标记的包

v2.11 2023-04-25 17:59 UTC

This package is auto-updated.

Last update: 2024-09-25 21:27:37 UTC


README

Markup 是一个包,允许您使用客观 PHP 生成 HTML 代码。它可以作为 Blade 模板(Laravel)中的辅助工具使用,但它基本上是为了支持我的其他项目而创建的。

该包与框架无关。这意味着您可以在使用 PSR-4 自动加载的任何项目中安装它。

使用方法

使用 Nethead\Markup\MarkupFactory 构建所需 HTML 的对象表示。可以使用它生成菜单、链接、块、段落等。MarkupFactory 包含有用的静态辅助函数,可以快速生成所需内容。该包还包括一个 tag 辅助函数,如果您更喜欢函数式方法。

生成 HTML 代码

use Nethead\Markup\MarkupFactory as Html;
// or
use function Nethead\Markup\Helpers\tag;

// Link to Google.com
Html::anchor('https://google.com', ['Go to Google'])->blank();

// Image link
Html::anchor('https://google.com', [
    Html::image('/img/google.png', 'Google Logo')
])->blank();

// Paragraph
tag('p', ['class' => 'px-2'], [
    'Here is how you can search with',
    tag('a', ['href' => 'https://google.com'], ['Google'])->blank()
]);

Markup 对象旨在支持方法链,具有自解释的语法,并能够通过执行链传递。这使得使用舒适的客观 API 对标记进行更改变得容易,而不是在字符串或数组上操作。这在您有多个模块、每个模块都修改或添加 HTML 内容时非常有用。

使用 HtmlAttributes

每个 Markup 对象都有一个公开的 attrs() 方法,它返回 HtmlAttributes 对象,从而允许您设置、删除或修改 HTML 元素的属性。

$menuItem = tag('li', ['class' => 'nav-item'], ['Discount!']);
// (...)
$menuItem->attrs()
    ->set('class', 'bold');

使用 ClassList 对象

每个 Markup 对象还允许您设置和删除 CSS 类,而无需调用 attr() 对象。您可以直接通过 classList() 公共方法访问 ClassList 对象。

if ($menuItem->classList()->caintains('bold')) {
    $menuItem->attrs()->data('modal', 'discount');
}

配置包

使用 HtmlConfig,您可以轻松更改 HTML 的生成方式。例如,如果您喜欢每次都关闭 void 标签(如 input),只需在开始创建之前调用此操作即可。

use Nethead\Markup\Helpers\HtmlConfig;

HtmlConfig::$closeVoids = true;

请参阅文档以更好地了解可以配置的内容以及如何进行配置。

图标工厂

IconsFactory 使得在图标字体提供者之间切换变得容易。默认情况下,它配置为生成 Font Awesome HTML 标签。例如,如果您使用 Bootstrap 的 Glyphicons,则可以这样做:

use Nethead\Markup\Helpers\IconsFactory;
use Nethead\Markup\Helpers\HtmlConfig;

HtmlConfig::$defaultIconsFactory = 'glyphicons';

print IconsFactory::icon('user');

表单

您可以使用面向对象的 PHP 构建 HTML 表单,并轻松添加业务逻辑。查看下面的示例,以了解构建语言选择下拉菜单有多简单。

use Nethead\Markup\MarkupFactory as Html;

$langs = [
    'en_GB' => 'English (British)',
    'pl_PL' => 'Polski'
];

$select = Html::select('locale', $langs);
$select->attrs()
    ->on('change', 'this.form.submit();');

$form = Html::form('/select-locale', 'POST', [$select]);