简书链接 :Forms & HTML 组件 - laravelcollective/html

安装

方法一:

  composer require laravelcollective/html

方法二:

  编辑项目的 composer.json 文件. 在 require 部分 加入 laravelcollective/html :

  "require": {

    "laravelcollective/html": "5.1.*"
  }

  然后composer update

配置

添加 provider 到 config/app.php 的 providers 数组:

'providers' => [
// ...
Collective\Html\HtmlServiceProvider::class,
// ...
],

最后 添加两个类链接到 config/app.php 的 aliases 数组:

'aliases' => [
// ...
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
// ...
],

创建表单

打开表单

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

默认是 POST 方法, 你可以随意指定其他接收方法

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

//Note: HTML 表单仅仅支持 POSTGET方法, PUTDELETE 方法将会使用一个隐藏域_method 添加到form 表单中来欺骗实现

你可以使用指定的控制器@动作 或者命名的路由来创建表单

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

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

同样也可以向路由中传入参数.

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

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

如果你的表单需要支持文件上传, 在数组中添加 一个 files 配置项.

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

CSRF 保护

向表单中添加 CSRF Token

Laravel 提供了一个简单的方法来防止你的应用遭受跨站攻击. 首先会在你的session 中生成一个随机的 token, 如果你使用 Form::open 方法并且提交方法是 POST, PUT或者是 DELETE, CSRF token 将会自动的添加到你的form 表单的隐藏域中. 换种方法 如果你像自己生成 CSRF token 字段, 你可以使用 token 方法.

echo Form::token();

给路由添加 CSRF 过滤器

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

表单模型绑定

给表单绑定模型

通常, 你需要想表单中填入来自数据库模型的数据. 想这样做你可以使用 Form::model 方法.

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

现在当你自动生成一个表单元素, 例如文本输入框. Model 的值将会自动匹配并且填写到相关的表单字段中.例如. 一个文本输入框的 name 是 email这个字段将会用 用户 Modelemail 属性来填充并且设置. 当然, 还有其他用法. 如果一个字段在session 闪存数据中 也存在这个名字, 这个将会覆盖模型中的这个字段值. 优先级是这个样子的:

  1. Session Flash Data (Old Input) [session 闪存 / 老的输入数据 ]
  2. Explicitly Passed Value [输入值]
  3. Model Attribute Data [模型属性值]

这个可以让你快速的使用模型数据来创建表单, 也能轻松的在服务器校验错误之后重新发布表单.

使用 Form::model方法的时候一定要使用 Form::close来关闭表单!

标签

生成标签元素

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

指定额外的 html 属性

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

注意:在创建了一个标签之后, 如果有创建的表单元素的 name 值和 label 的 name 值相符的话, 将会自动在 表单元素 中自动匹配增加 id 属性. id 的值就是 label 的name 值.

文本框, 文本域, 密码 & 隐藏域

创建文本框

echo Form::text('username');

指定默认值

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

注意: hiddentextarea 方法的参数和 text 相同.

生成密码输入框

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

生成其他输入框

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

多选和单选

生成单选和多选

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', array('L' => 'Large', 'S' => 'Small'));

生成有默认值的下拉列表

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

生成空占位符的 下拉列表

这回创建一个没有任何值的 <option> 元素作为下拉列表的第一个选择值.

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

生成分组的列表

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

生成范围选择值的下拉列表

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

生成有月份名称的选择值

echo Form::selectMonth('month');

按钮

生成提交按钮

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

注意:想创建一个按钮元素? 试用 button 方法. 他和 submit 方法有相同的参数

自定义表单元素

注册一个新的表单元素

用来很方便的来自定义一个表单元素的方法叫做 macros . 合理是怎样使用它. 首先简单的使用名称和闭包函数来注册一个 :

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

现在你可以使用自定义的名字来调用这个 macro

调用自定义的 Form Macro

echo Form::myField()

生成URL

link_to

根据给定的URL生成 html 链接

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

link_to_asset

生成一个链接到指定资源的 html

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

link_to_route

生成一个根据给定路由的html链接

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

link_to_action

根据指定的控制器/方法来生成 html 链接

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

Forms & HTML 组件 - laravelcollective/html的更多相关文章

  1. django的forms认证组件

    django的forms认证组件 每个网站的注册界面都需要有相应的"认证"功能,比如说认证注册页面的用户名是否已被注册,二次输入的密码是否一致以及认证用户输入的用户名.邮箱.手机号 ...

  2. 多对多的三种创建方式-forms相关组件-钩子函数-cookie与session

    多对多的三种创建方式 1.全自动(推荐使用的**) 优势:第三张可以任意的扩展字段 缺点:ORM查询不方便,如果后续字段增加更改时不便添加修改 manyToManyField创建的第三张表属于虚拟的, ...

  3. 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选

    在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...

  4. Xamarin组件包 Xamarin.ToolKit

    一  简介 Xamarin.ToolKit是个人在使用xamrin.froms开发2年中,因实际项目需要所自定义的组件包.该组件包采用xamarin.froms方式封装,用户可像普通forms控件那样 ...

  5. 前端MVC Vue2学习总结(五)——表单输入绑定、组件

    一.表单输入绑定 1.1.基础用法 你可以用 v-model 指令在表单控件元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素.尽管有些神奇,但 v-model 本质上不过是语法糖, ...

  6. Django form表单 组件

    目录 Django form表单 组件 Form 组件介绍 普通方式手写注册功能 使用form组件实现注册功能 Form 常用字段与插件 常用字段(必备) 字段参数(必备) 内置验证(必备) 自定义效 ...

  7. Django多对多关系建立及Form组件

    目录 Django多对多关系 1.创建方式一全自动 2.创建方式二纯手撸 3.半自动(推荐使用) forms校验组件 使用forms组件实现注册功能 form常用字段和插件 数据校验 钩子函数 HOO ...

  8. React 学习笔记(学习地址汇总)

    好的博文地址:http://www.ruanyifeng.com/blog/2015/03/react.html 官网学习地址:http://facebook.github.io/react/docs ...

  9. C#操作office进行Excel图表创建,保存本地,word获取

    ,新建C#控制台应用程序(Excel创建图表) using System; using System.Collections.Generic; using System.Linq; using Sys ...

随机推荐

  1. CodeForces 221(div 2)

    A 无trick水题... /* * Author: Plumrain * Created Time: 2013-12-24 22:26 * File Name: B.cpp */ #include ...

  2. poj 3084 最小割

    题目链接:http://poj.org/problem?id=3084 本题主要在构图上,我采用的是把要保护的房间与源点相连,有intruder的与汇点相连,相对麻烦. #include <cs ...

  3. I - Arbitrage

    题目大意:套汇 套利是使用货币汇率的差异将一个单位的货币转换为多个相同的货币单位,例如1美元可以买0.5英镑,1英镑可以买10法郎,1法郎可以买0.21美元,然后聪明的人经过一些列兑换可以得到 1*0 ...

  4. [Unity-24] Unity的四种载入场景的方法

    Unity官方提供了4种载入场景(scene)的方法.各自是: 1. Application.LoadLevel():同步载入 2. Application.LoadLevelAsync():异步载入 ...

  5. poj 3735 大数量反复操作问题(矩阵高速幂)

    题意:一个一维数组,3种操作: a:  第i个数+1,b: 第i个数=0 ,c::交换某俩处的数.  由三种基本操作构成一组序列,反复该序列m次(m<10^9),问结果 属于一种综合操作反复型: ...

  6. TCP/IP源码(59)——TCP中的三个接收队列

    http://blog.chinaunix.net/uid-23629988-id-3482647.html TCP/IP源码(59)——TCP中的三个接收队列  作者:gfree.wind@gmai ...

  7. win32下进程间通信——共享内存

    一.引言     在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效的进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换 ...

  8. Valgrind简介:

    Valgrind是动态分析工具的框架.有很多Valgrind工具可以自动的检测许多内存管理和多进程/线程的bugs,在细节上剖析你的程序.你也可以利用Valgrind框架来实现自己的工具. Valgr ...

  9. Meth | 安装Linux Mint 18以后grub2 win10启动引导项丢失??!!

    进入mint,打开终端输入:sudo update-grub2

  10. iOS开发系列之远程控制事件

    在今天的文章中还剩下最后一类事件:远程控制,远程控制事件这里主要说的就是耳机线控操作.在前面的事件列表中,大家可以看到在iOS中和远程控制事件有关的只有一个- (void)remoteControlR ...