magentron/laravel-html

流畅的HTML构建器

2.19.7 2018-04-30 09:18 UTC

README

这是由 spatie/laravel-html,由 Jeroen Derks,又名 Magentron 开发的分支。创建此分支是为了确保与PHP 5.6.x的兼容性。

Latest Version on Packagist Software License Build Status Quality Score StyleCI Total Downloads

此包可以帮助您使用干净、简单且易于阅读的API生成HTML。所有元素都可以动态生成并组合在一起。HTML构建器可以帮助您根据所选模型、会话或默认值生成动态分配的表单元素。

文档

您可以在此处找到完整的文档。

升级到 2.0

由于2.0版本可能会破坏一些非常具体的情况,因此进行了标记,但您很可能不需要升级!有关详细信息,请参阅“升级”

生成元素

例如,使用元素的流畅方法创建一个带有类的新span元素非常简单

html()->span()->text('Hello world!')->class('fa fa-eye');

构建表单

以下是一个快速示例,它构建了一个带有电子邮件输入的基本表单

{{ html()->form('PUT', '/post')->open() }}

{{ html()->email('email')->placeholder('Your e-mail address') }}

{{ html()->form()->close() }}

生成的HTML将如下所示

<form method="POST" action="/post">
    <input type="hidden" name="_method" id="_method" value="PUT">
    <input type="hidden" name="_token" id="_token" value="csrf_token_will_be_here">
    <input type="email" name="email" id="email" placeholder="Your e-mail address">
</form>

请注意,隐藏的 _method _token 字段是否已自动添加并填充?您再也不用担心忘记添加 csrf_field() 了,因为现在您根本不需要再添加了!

另一个常见用例可能是根据先前提交的值(使用 $request->old())填充输入元素。不用担心,这也已经得到解决。上面的代码会在 $session->old('email')存在时自动填写 email字段。太棒了。

HTML构建器中的模型

HTML构建器还可以根据模型生成元素

{{ html()->modelForm($user)->open() }}

{{ html()->input('name') }}

{{ html()->closeModelForm() }}

如果存在, name 字段的值将自动填充模型的 name属性

<form method="POST">

<input type="text" name="name" id="name" value="John">

</form>

“模型”可以是任何实现了 ArrayAccess 的对象——从复杂的Eloquent模型到简单的数组。

Postcardware

您可以使用此包(它是MIT许可的),但如果它进入您的生产环境,我们非常欢迎您从您的家乡寄给我们一张明信片,说明您正在使用我们哪个包。

我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。

所有明信片都将在我们的网站上发布在这里

安装

您可以通过Composer安装此包

composer require magentron/laravel-html

接下来,您必须安装服务提供程序

// config/app.php
'providers' => [
    ...
    Spatie\Html\HtmlServiceProvider::class,
];

并且可选地注册一个门面别名。

// config/app.php
'aliases' => [
    ...
    'Html' => Spatie\Html\Facades\Html::class,
];

使用

概念

Spatie\Html\Elements 命名空间下的类通常是使用 Spatie\Html\Html 构建器实例创建的。

html()->span()->text('Hello world!');

通过流畅方法修改元素属性和内容,这些方法返回一个新实例。这意味着元素实例是不可变的。

$icon = html()->span()->class('fa');

$icon->class('fa-eye'); // '<span class="fa fa-eye"></span>'
$icon->class('fa-eye-slash'); // '<span class="fa fa-eye-slash"></span>'

元素类对外部世界没有任何了解。任何与其他概念(如请求和会话)的耦合都应该发生在构建器类上,而不是元素类上。

按照惯例,我们假设构建器方法将修改值以符合我们的利益(如从失败的表单请求中拉取旧值),而元素方法将是确定性的。

// This will try to resolve an initial value, and fall back to 'hello@example.com'
$email = html()->email('email', 'hello@example.com');

// This will always have 'hello@example.com' as it's value
$email = html()->email('email')->value('hello@example.com');

升级

从 v1 升级到 v2

版本2的创建是因为版本1中的类型提示在某些情况下阻碍了包的发展(例如,多选需要值数组而不是假设的字符串)。

幸运的是,在composer.json中提升版本号并运行composer update应该不会中断服务。以下是一些需要注意的事项:

  • 现在默认包含了一个html()函数,它返回Html构建类的一个实例。如果你已经定义了自己的方法,你需要将其删除。
  • 整个包中删除了各种类型提示,如果你扩展了类以覆盖其方法,你需要相应地更新它们(一切仍然表现正常!)

变更日志

有关最近更改的更多信息,请参阅变更日志

测试

$ composer test

贡献

有关详细信息,请参阅贡献指南

安全

如果你发现任何安全问题,请通过电子邮件freek@spatie.be联系,而不是使用问题跟踪器。

鸣谢

关于Spatie

Spatie是一家位于比利时安特卫普的网页设计公司。你可以在我们的网站上找到我们所有开源项目的概述在这里

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件