aviator / html
Requires
- php: >=7.2.0
- aviator/delegate: 1.*
- cocur/slugify: ^4.0
Requires (Dev)
- illuminate/support: ^7.0
- larapack/dd: ^1.1
- phpunit/phpunit: ^8.5
- vimeo/psalm: ^3.2
README
Html
Html 是一个用于构建有效 HTML 片段的简单包。它可以在您希望在一个类而不是模板文件中封装更多逻辑的模板系统中使用。
入门指南
先决条件
此包需要 PHP 7 或更高版本。
安装
通过 Composer
composer require aviator/html
测试
运行
composer test
用法
标签
要构建一个 HTML 块,创建一个新的标签
$tag = new Tag('div');
或者,使用静态构造函数
$tag = Tag::make('div');
或者,使用魔法静态调用
$tag = Tag::div();
或者,使用全局辅助函数
$tag = tag('div');
要渲染标签,调用 render()
echo $tag->render();
这将产生
<div></div>
Tag
类只接受有效的 HTML 标签。尝试创建一个无效的标签将抛出异常。
内容
标签可以有内容。您可以传递一个字符串、一个 Tag
或两者的数组。
字符串
使用 with()
方法向标签添加内容
$tag = tag('div')->with('some content');
这将渲染为
<div>some content</div>
此外,with()
将尝试获取任何非字符串、非可渲染传递进来的对象的字符串表示形式,包括实现 __toString()
的对象。
嵌套标签
标签可以嵌套
$tag = tag('div')->with( tag('p')->with('some content') );
渲染
<div><p>some content</p></div>
数组
您也可以使用一个数组
$tag = tag('ul')->with([ tag('li')->with('list item 1'), tag('li')->with('list item 2'), 'misplaced text', ]);
这将渲染
<ul> <li>list item 1</li> <li>list item 2</li> misplaced text </ul>
空标签
Tag
类知道哪些标签是空的,不需要关闭标签。例如,<input>
、<hr>
等。不需要做任何事情。
空标签不能有内容。尝试向它们添加内容将抛出异常。
片段
可以使用 Fragment
渲染直接兄弟元素。片段只是一个未嵌套的标签集合(或其他可渲染的元素,甚至是其他片段)
$fragment = new Fragment([ new Tag('p'), new Tag('div'), ]); // Or Fragment::make([...]);
$fragment->render()
:
<p></p><div></div>
条件标签
您可以创建一个仅在特定情况下渲染的标签
$tag = new Tag('div'); // Evaluates equality, eg truthy and falsey values $tag->setShouldRender(false);
或者
$tag = Tag::when(false, 'div');
$tag->render()
:
''
CSS 类
要为您的标签指定 CSS 类,传递第二个参数
$tag = tag('div', 'some-class');
渲染
<div class="some-class"></div>
可以通过数组传递多个 CSS 类
$tag = tag('div', ['class-one', 'class-two'])
渲染
<div class="class-one class-two"></div>
实例化之后
如果您需要在实例化后添加类,可以调用 addClass()
,它接受与构造函数相同的字符串或数组
$tag = tag('div'); $tag->addClass('some-class'); $tag->addClass(['class2', 'class3']);
属性
属性作为第三个参数传递。具有值的属性通过关联传递。布尔属性只是一个值。
$tag = tag('input', 'some-class', [ 'value' => 'content', 'disabled' ]);
渲染
<input value="content" disabled>
实例化之后
如果您需要在实例化后添加属性,可以调用 addAttribute()
,它接受与构造函数相同的数组
$tag = tag('input'); $tag->addAttribute(['autocomplete' => 'off']); $tag->addAttribute(['disabled']);
验证
属性会经过验证,以确保它们属于您应用的标签。例如,将 max
属性添加到 <div>
将抛出异常。
获取属性值
如果您想从一个 Tag
实例中检索属性,请调用 attribute($name)
。如果您的属性存在,您将获取值(布尔属性始终返回 true
),否则您将获取 null。
echo tag('input')->addAttribute(['name' => 'some_name'])->attribute('name'); // Result: 'some_name' echo tag('input')->addAttribute(['disabled'])->attribute('disabled'); // Result: true echo tag('input')->attribute('foo'); // Result: null
选项
如果您想渲染一个开标签,请调用 dontClose()
方法
echo tag('div')->dontClose()->render()
结果
<div>