字段公共方
<?php
$field=StringField::init('nickname', '昵称','基本信心');//字段名称、标题、分组(分组可不填)
//以下方法中,不传入参数表示获取字段的属性:如,字段获取是否为必填 $filed->required()
//标题,可以在字段init初始化时设置(第三个参数),也可以使用此方法设置
$filed->title('姓名');
//字段分组,可以在字段init初始化时设置(第三个参数),也可以使用此方法设置
$filed->group('人员基本情况');
//为字段设置标签,可多次设置,表示设置多个,方便后面对字段进行分类
$filed->tag('个人信息')->tag('基本情况');
//字段设置为必填,默认是非必填(false)
$filed->required(true);
//字段是否为只读,默认是false
$filed->readOnly(true);
//字段后缀,一般用来展示字段的单位,如金额单位(元),面积单位(㎡)
$filed->ext('公斤');
//输入框内的提示,默认会根据字段类型与标题自动生成
$filed->placeholder('请输入您的姓名');
//字段编辑和显示时,底部显示
$filed->explain('真实姓名');
//explain的显示颜色
$field->explainColor('#bfbfbf');
//当编辑时,会在字段下方显示,对填写人进行提示
$filed->editExplain('需填写真实姓名');
//编辑页面label的对齐方式,默认是right,可设置为left/right
$filed->editLabelAlign('left');
//编辑页面中,label的显示位置控制,默认会自动生成,请参考https://2x.antdv.com/components/grid-cn/#Col 中的API-Col部分
$filed->editLabelCol([
'span'=>4,
]);
//编辑页面中,输入框部分的显示位置控制,默认会自动生成,请参考https://2x.antdv.com/components/grid-cn/#Col 中的API-Col部分
$filed->editWrapperCol([
'span'=>18,
]);
//编辑页面是否显示label后面的冒号,默认为true
$filed->editColon(false);
//字段是否在编辑页面中显示,默认为true
$filed->editShow(false);
//字段是否会在列表中显示,默认为false
$filed->listShow(true);
//字段在列表中显示的宽度,单位是px。默认会根据字段的类型生成一个默认宽度
$filed->listColumnWidth(55);
//如果设置为true,可在列表中点击表头以此字段进行升序或降序获取列表
$filed->listSort(true);
//列表中,列是否浮动,默认不浮动,可设置为left/right
$filed->listFixed('left');
//字段是否会在详情页面中显示,默认为true
$filed->showPage(false);
//查看页面是否显示label部分,默认为true
$filed->showUseComponent(false);
//字段是否可以导入的方式写入,默认为true,某些字段默认为false
$filed->canExcelImport(false);
//是否自动生成数据库表字段,默认为true,当模型方法generateTable返回true时有效
$field->generateColumn(false);
//该字段是否可以导出,默认为true
$field->canExport(true)
字段特殊方法
1.pushHideSelfWhere字段满足条件时,隐藏字段
如:如果是女,可填写住址,如果是男,隐藏住址
<?php
public function fields(): FieldCollection
{
$sexField=RadioField::init('sex', '性别')->items(['男', '女'])->required(true);
$addressField=TextField::init('address', '住址');
//设置字段隐藏条件
$hideWhere=FieldWhere::make($sexField,'男');
//对要隐藏的字段设置隐藏条件
$addressField->pushHideSelfWhere($hideWhere);
return new FieldCollection([
StringField::init('name', '姓名')->listShow(true)->required(true),
$sexField,
DateField::init('date','出生日期'),
$addressField,
]);
}
如:如果是男,且出生日期小于2020-01-01,可填写住址,如果是女,隐藏住址
<?php
public function fields(): FieldCollection
{
$sexField=RadioField::init('sex', '性别')->items(['男', '女'])->required(true);
$addressField=TextField::init('address', '住址');
$dateFiled=DateField::init('date','出生日期');
//设置字段隐藏条件
$hideWhere=FieldWhere::make($sexField,'男')
->and($dateFiled,[null,strtotime('2020-01-01')-1],FieldWhere::BETWEEN);
//对要隐藏的字段设置隐藏条件
$addressField->pushHideSelfWhere($hideWhere);
return new FieldCollection([
StringField::init('name', '姓名')->listShow(true)->required(true),
$sexField,
$dateFiled,
$addressField,
]);
}
如:如果是女,或者出生日期小于2020-01-01,可填写住址
<?php
public function fields(): FieldCollection
{
$sexField=RadioField::init('sex', '性别')->items(['男', '女'])->required(true);
$addressField=TextField::init('address', '住址');
$dateFiled=DateField::init('date','出生日期');
########################### <两种写法,第一种 >##############################
$hideWhere=FieldWhere::make($sexField,'男')
->or($dateFiled,[null,strtotime('2020-01-01')-1],FieldWhere::BETWEEN);
//对要隐藏的字段设置隐藏条件
$addressField->pushHideSelfWhere($hideWhere);
########################### <两种写法,第二种> #############################
$hideWhere1=FieldWhere::make($sexField,'男');
$hideWhere2=FieldWhere::make($dateFiled,[null,strtotime('2020-01-01')-1],FieldWhere::BETWEEN);
//对要隐藏的字段设置隐藏条件
$addressField->pushHideSelfWhere($hideWhere1);
$addressField->pushHideSelfWhere($hideWhere2);
return new FieldCollection([
StringField::init('name', '姓名')->listShow(true)->required(true),
$sexField,
$dateFiled,
$addressField,
]);
}
2.动态设置字段的属性
可以根据用户输入的值,来设置字段的属性(title、required、readOnly,等等,很多基础属性都可以动态设置)。
如:如果是男,住址为必填;如果是女,住址为非必填
<?php
public function fields(): FieldCollection
{
$sexField=RadioField::init('sex', '性别')->items(['男', '女'])->required(true);
$addressField=TextField::init('address', '住址');
############################ <两种写法,写法1>
//如果在pushAttrByWhere前设置了 字段属性的默认值,如:required=true,那么当它不满足where条件时,会变为默认值
$addressField->required(true);
$addressField->pushAttrByWhere('required',false,FieldWhere::make($sexField,'女'));
############################ <两种写法,写法2>
//如果在pushAttrByWhere前未设置required=true,那么当它不满足条件时,不会变回来,会一直保持这样的属性
$addressField->pushAttrByWhere('required',true,FieldWhere::make($sexField,'男'));
$addressField->pushAttrByWhere('required',false,FieldWhere::make($sexField,'女'));
return new FieldCollection([
StringField::init('name', '姓名')->listShow(true)->required(true),
$sexField,
DateField::init('date','出生日期'),
$addressField,
]);
}
3.编辑时,满足条件对用户提示
此功能比较冷门,只对输入人员提示,未做任何处理
<?php
public function fields(): FieldCollection
{
$moneyField=DecimalField::init('money','金额');
$moneyField->pushEditTip('请注意金额已经超过100元',FieldWhere::make($moneyField,[100.01,200],FieldWhere::BETWEEN));
$moneyField->pushEditTip('请注意金额已经超过200元',FieldWhere::make($moneyField,[200.01,null],FieldWhere::BETWEEN));
return new FieldCollection([
StringField::init('name', '姓名')->listShow(true)->required(true),
RadioField::init('sex', '性别')->items(['男', '女'])->required(true),
$moneyField
]);
}
4.字段的事件钩子pushFieldDo
字段其他方法
1.getType() 获取字段的类型
2.removeTag($tags) 删除字段的一些标签
3.clearTag() 清空字段的标签
4.toArray() 字段转换为数组
5.validateRule() 为字段添加保存验证规则
具体规则请查看TP6的规则 https://www.kancloud.cn/manual/thinkphp6_0/1037629
使用示例:
- 用户名为唯一:
StringField::_init_('name', '姓名')->validateRule('unique:User')
- 自定义验证:
StringField::_init_('name', '姓名')->validateRule(function ($value,$data){return '验证失败提示信息';})
6.filter() 更改字段的筛选对象
当字段被初始化时,会设置一个默认筛选对象
当不想启用筛选时,可设置筛选的对象为空筛选StringField::_init_('name', '姓名')->filter(new EmptyFilter())
7.doFilter() 传入一个闭包函数,对筛选对象进行设置
示例:
<?php
$areaFilterItems=fn(BetweenFilter $filter) => $filter->setItems([
['start' => 0, 'end' => 99.99, 'title' => '100m²以下'],
['start' => 100, 'end' => 299.99, 'title' => '100-300(不包含)m²'],
['start' => 300, 'end' => 499.99, 'title' => '300-500(不包含)m²'],
['start' => 500, 'end' => null, 'title' => '500m²及以上'],
]);
DecimalField::init('land_area','总用地面积')->doFilter($areaFilterItems);
8.setDefaultHideFilter() 设置字段筛选默认不出现在列表中
设置后,在列表中只有点更多筛选,字段的筛选才会出现在页面中
9.steps() 设置字段的步骤
10.cloneField() 克隆字段
只有在一个页面中需要多次出现一个字段时使用