一、为什么要使用laravel的Forms&HTML组件?
因为第一次用Laravel,虽然都在说laravel好,但自己没有意识到他好在哪里的时候,只能先用他已有的工具,Forms和HTML工具同样如此,感觉用起来也不省事,而且还不符合自己曾经编写HTML表单的习惯,看着怪别扭,上网查了一些资料,说是使用这个组件会减少HTML代码量,并且会协助创建CSRF(Cross Site Request Forgery, 跨站域请求伪造)的验证token,暂时没体会到这些好处,先用起来再说,慢慢品!
二、Forms&HTML组件安装配置
1. 跳转到项目根目录(windows进入dos系统中操作),执行以下代码,安装组件包:
composer require "laravelcollective/html":"^5.2.0"
2. 修改配置文件/config/app.php
(1)在providers中添加组件支持类
'providers' => [
// ...
Collective\Html\HtmlServiceProvider::class, // 增加这一行代码
// ...
],
(2)在aliases中添加组件类别名
'aliases' => [
// ...
'Form' => Collective\Html\FormFacade::class,
'Html' => Collective\Html\HtmlFacade::class,
// ...
],
三、Forms&HTML组件具体使用
1. 创建表单(一般用于添加数据时使用)
/*
* 作用:创建表单
*
* 参数1:数组
* (1)url:表单提交地址;
* (2)method:表单提交方式,如果不设置,默认为post;
* (3)files:如果设置files为true,表示当前表单支持文件上传
*
* 参数2:数组,可以写表单所有的各种Html属性,如class、id、style等。
**/
{!! Form::open(array('url' => '/admin/index', 'method' => 'post', 'files' => true), ['class'=>'formclass']) !!}
//
{!! Form::close() !!}
2. 生成CSRF token
如果使用Form::open方式创建表单的话,laravel会自动生成token,如果自己写的html表单,要生成token,可以使用如下组件:
{!! Form::token() !!}
3. 表单模型绑定(一般用于修改数据时使用)
通常, 你需要想表单中填入来自数据库模型的数据. 想这样做你可以使用 Form::model
方法:
/*
* 作用:创建模型绑定表单
* 说明:
* (1)$user:根据id获取到的用户信息数组;
* (2)route:当前表单提交的路由地址及参数值。
**/
{!! Form::model($user, ['route'=>array('user.update', $user->id), 'method'=>'PUT']) !!}
4. 表单组件
(1)文本表单
/*
* 参数1:name为该表单name值;
* 参数2:表单默认value值
* 参数3:当前表单所有的属性数组
*/
// 文本框text
{
{ Form::text('name', null, ['class'=>'small', 'style'=>'color:#333;']) }}
// 文本域textarea
{
{ Form::textarea('name', null, ['class'=>'small', 'col'=>'50', 'row'=>'6']) }}
// 隐藏域hidden
{
{ Form::hidden('name', null, ['class'=>'small']) }}
// 其他文本框,如email、number、date
{
{ Form::email($name, $value = null, $attributes = array()) }}
{
{ Form::number('name', 'value') }}
{
{ Form::date('name', \Carbon\Carbon::now()) }}
(2)密码输入框
/*
* 参数1: 表单参数名称
* 参数2: 表单属性
*/
{
{ Form::password('pwd', array('class' => 'awesome')) }}
(3)文件选择表单
/*
* 参数1: 表单参数名称
* 参数2: 表单属性
*
* 注意: 在使用文件选择器时,Form::open或者Form::model的属性files必须设置为true。
*/
{
{ Form::file($name, $attributes = array()) }}
(4)单选和多选表单
/*
* 参数1:表单属性名;
* 参数2:表单属性值;
* 参数3: 表单是否被选中,默认为false,true为被选中状态
*/
// 未被选择的单选表单
{
{ Form::radio('name', 'value') }}
// 未被选择的多选表单
{
{ Form::checkbox('name', 'value') }}
// 已被选择的单选表单
{
{ Form::radio('name', 'value', true) }}
// 已被选择的多选表单
{
{ Form::checkbox('name', 'value', true) }}
(5)下拉表单
// 生成普通下拉列表
{
{ Form::select('size', array('L' => 'Large', 'S' => 'Small')) }}
// 生成有默认值的下拉列表,默认显示S键值对应数据
{
{ Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S') }}
// 生成带有空占位符的下拉列表(创建一个没有任何值的 <option> 元素作为下拉列表的第一个选择值)
{
{ Form::select('size', array('L' => 'Large', 'S' => 'Small'), null, ['placeholder' => 'Pick a size...']) }}
// 生成分组的下拉列表列表
{
{ Form::select('animal', array(
'Cats' => array('leopard' => 'Leopard'),
'Dogs' => array('spaniel' => 'Spaniel'),
)) }}
// 生成范围选择值的下拉列表
{
{ Form::selectRange('number', 10, 20) }}
// 生成有月份名称的选择值
{
{ Form::selectMonth('month') }}
(6)按钮
// 生成表单提交按钮
{
{ Form::submit('Click me!') }}
// 生成表单button按钮
{
{ Form::button('Click me!') }}