laravie/html

Laravel 框架的 HTML 和表单构建器

v7.3.0 2022-03-13 02:57 UTC

README

tests Total Downloads Latest Stable Version Latest Unstable Version License

安装

要通过 composer 安装此包,请在终端运行以下命令

composer require "laravie/html"

接下来,将您的新提供者添加到 config/app.php 文件的 providers 数组中

'providers' => [

    // ...

    Collective\Html\HtmlServiceProvider::class,

],

最后,将两个类别名添加到 config/app.php 文件的 aliases 数组中

'aliases' => [

    // ...

    'Form' => Collective\Html\FormFacade::class,
    'Html' => Collective\Html\HtmlFacade::class,

],

想要在 Lumen 中安装此包吗?首先,使此包与 Lumen 兼容需要对 Lumen 的核心进行一些更改,我们认为这将削弱 Lumen 的最初作用。其次,我们相信,如果您需要在您的应用程序中使用此包,那么您应该使用 Laravel。

打开表单

打开表单

{!! Form::open(['url' => 'foo/bar']) !!}
    //
{!! Form::close() !!}

默认情况下,将假定 POST 方法;但是,您可以自由指定其他方法

echo Form::open(['url' => 'foo/bar', 'method' => 'put'])

注意:由于 HTML 表单只支持 POSTGET,因此 PUTDELETE 方法将通过自动在您的表单中添加一个 _method 隐藏字段来被欺骗。

您还可以打开指向命名路由或控制器操作的表单

echo Form::open(['route' => 'route.name'])

echo Form::open(['action' => 'Controller@method'])

您还可以传递路由参数

echo Form::open(['route' => ['route.name', $user->id]])

echo Form::open(['action' => ['Controller@method', $user->id]])

如果您的表单将要接受文件上传,请将 files 选项添加到您的数组中

echo Form::open(['url' => 'foo/bar', 'files' => true])

CSRF 保护

将 CSRF 令牌添加到表单中

Laravel 提供了一种简单的方法来保护您的应用程序免受跨站请求伪造。首先,一个随机令牌被放置在您的用户的会话中。如果您使用 Form::open 方法与 POSTPUTDELETE,CSRF 令牌将自动添加到您的表单中作为隐藏字段。或者,如果您想生成隐藏 CSRF 字段的 HTML,您可以使用 token 方法

echo Form::token();

将 CSRF 过滤器附加到路由上

Route::post('profile', ['before' => 'csrf', function() {
    //
}]);

表单模型绑定

打开模型表单

通常,您会希望根据模型的内容填充表单。为此,请使用 Form::model 方法

echo Form::model($user, ['route' => ['user.update', $user->id]])

现在,当您生成一个表单元素,如文本输入时,与字段名称匹配的模型值将自动设置为字段值。例如,对于名为 email 的文本输入,用户模型的 email 属性将被设置为值。但是,还有更多!如果会话闪存数据中存在与输入名称匹配的项,它将优先于模型的值。所以优先级看起来是这样的

  1. 会话闪存数据(旧输入)
  2. 显式传递的值
  3. 模型属性数据

这允许您快速构建不仅绑定到模型值,而且在服务器上发生验证错误时可以轻松重新填充的表单!

注意:当使用 Form::model 时,请确保使用 Form::close 关闭您的表单!

表单模型访问器

Laravel的Eloquent访问器允许你在返回模型属性之前对其进行操作。这可以非常有助于定义全局日期格式,例如。然而,用于显示的日期格式可能与用于表单元素的日期格式不匹配。你可以通过创建两个单独的访问器来解决此问题:一个标准访问器,以及一个表单访问器。

要定义一个表单访问器,在你的模型上创建一个formFooAttribute方法,其中Foo是你想访问的列的“驼峰命名”名称。在这个例子中,我们将定义一个用于date_of_birth属性的访问器。当使用Form::model()尝试预填充表单字段时,HTML表单构建器将自动调用此访问器。

标签

生成标签元素

echo Form::label('email', 'E-Mail Address');

指定额外的HTML属性

echo Form::label('email', 'E-Mail Address', ['class' => 'awesome']);

注意:创建标签后,任何具有与标签名称匹配的名称的表单元素都将自动接收与标签名称匹配的ID。

文本、文本区域、密码和隐藏字段

生成文本输入

echo Form::text('username');

指定默认值

echo Form::text('email', 'example@gmail.com');

注意:隐藏和文本区域方法与文本方法的签名相同。

生成密码输入

echo Form::password('password', ['class' => 'awesome']);

生成其他输入

echo Form::email($name, $value = null, $attributes = []);
echo Form::file($name, $attributes = []);

复选框和单选按钮

生成复选框或单选框输入

echo Form::checkbox('name', 'value');

echo Form::radio('name', 'value');

生成已勾选的复选框或单选框输入

echo Form::checkbox('name', 'value', true);

echo Form::radio('name', 'value', true);

数字

生成数字输入

echo Form::number('name', 'value');

日期

生成日期输入

echo Form::date('name', \Carbon\Carbon::now());

文件输入

生成文件输入

echo Form::file('image');

注意:表单必须已用files选项设置为true来打开。

下拉列表

生成下拉列表

echo Form::select('size', ['L' => 'Large', 'S' => 'Small']);

生成带选中默认值的下拉列表

echo Form::select('size', ['L' => 'Large', 'S' => 'Small'], 'S');

生成带空占位符的下拉列表

这将创建一个无值的<option>元素,作为下拉列表中的第一个选项。

echo Form::select('size', ['L' => 'Large', 'S' => 'Small'], null, ['placeholder' => 'Pick a size...']);

生成分组列表

echo Form::select('animal', [
    'Cats' => ['leopard' => 'Leopard'],
    'Dogs' => ['spaniel' => 'Spaniel'],
]);

生成带范围的下拉列表

echo Form::selectRange('number', 10, 20);

生成带月份名称的列表

echo Form::selectMonth('month');

按钮

生成提交按钮

echo Form::submit('Click Me!');

生成按钮

echo Form::button('Click Me!');

注意:第三个参数的默认值为true。默认情况下,你传递的任何值都将被转义。

echo Form::button('<i class="fa fa-trash><i> Destroy"', ['class' => 'btn btn-danger'], false);

自定义宏

注册表单宏

定义名为“宏”的自定义表单类助手很容易。下面是如何工作的。首先,只需使用给定的名称和闭包注册宏

Form::macro('myField', function() {
    return '<input type="awesome">';
});

现在你可以使用其名称调用你的宏

调用自定义表单宏

echo Form::myField();

##自定义组件

注册自定义组件

自定义组件类似于自定义宏,但与使用闭包生成结果HTML不同,组件利用Laravel Blade模板。对于使用Twitter Bootstrap或任何其他需要额外标记才能正确渲染表单的前端框架的开发者来说,组件非常有用。

让我们为简单的Bootstrap文本输入构建一个表单组件。你可能考虑在服务提供者的boot方法中注册你的组件。

Form::component('bsText', 'components.form.text', ['name', 'value', 'attributes']);

注意我们如何引用视图路径components.form.text。此外,我们提供的数组是组件的一种方法签名。这定义了将传递给视图的变量名称。你的视图可能看起来像这样

// resources/views/components/form/text.blade.php
<div class="form-group">
    {{ Form::label($name, null, ['class' => 'control-label']) }}
    {{ Form::text($name, $value, array_merge(['class' => 'form-control'], $attributes)) }}
</div>

自定义组件也可以像在Form外观上一样在Html外观上创建。

提供默认值

在定义自定义组件的方法签名时,你可以通过给数组项赋值来提供默认值,如下所示

Form::component('bsText', 'components.form.text', ['name', 'value' => null, 'attributes' => []]);

调用自定义表单组件

使用上面的示例(特别是提供了默认值的那个),您可以这样调用您的自定义组件:

{{ Form::bsText('first_name') }}

这将产生类似以下HTML输出的内容:

<div class="form-group">
    <label for="first_name">First Name</label>
    <input type="text" name="first_name" value="" class="form-control">
</div>

##生成URL

link_to

生成指向给定URL的HTML链接。

echo link_to('foo/bar', $title = null, $attributes = [], $secure = null);

link_to_asset

生成指向给定资产的HTML链接。

echo link_to_asset('foo/bar.zip', $title = null, $attributes = [], $secure = null);

link_to_route

生成指向给定命名路由的HTML链接。

echo link_to_route('route.name', $title = null, $parameters = [], $attributes = []);

link_to_action

生成指向给定控制器操作的HTML链接。

echo link_to_action('HomeController@getIndex', $title = null, $parameters = [], $attributes = []);