nethead / markup
Laravel 中生成 HTML 标记的包
Requires
- php: ^7.3
Requires (Dev)
- phpunit/phpunit: ^9
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]);