字段公共方

  1. <?php
  2. $field=StringField::init('nickname', '昵称','基本信心');//字段名称、标题、分组(分组可不填)
  3. //以下方法中,不传入参数表示获取字段的属性:如,字段获取是否为必填 $filed->required()
  4. //标题,可以在字段init初始化时设置(第三个参数),也可以使用此方法设置
  5. $filed->title('姓名');
  6. //字段分组,可以在字段init初始化时设置(第三个参数),也可以使用此方法设置
  7. $filed->group('人员基本情况');
  8. //为字段设置标签,可多次设置,表示设置多个,方便后面对字段进行分类
  9. $filed->tag('个人信息')->tag('基本情况');
  10. //字段设置为必填,默认是非必填(false)
  11. $filed->required(true);
  12. //字段是否为只读,默认是false
  13. $filed->readOnly(true);
  14. //字段后缀,一般用来展示字段的单位,如金额单位(元),面积单位(㎡)
  15. $filed->ext('公斤');
  16. //输入框内的提示,默认会根据字段类型与标题自动生成
  17. $filed->placeholder('请输入您的姓名');
  18. //字段编辑和显示时,底部显示
  19. $filed->explain('真实姓名');
  20. //explain的显示颜色
  21. $field->explainColor('#bfbfbf');
  22. //当编辑时,会在字段下方显示,对填写人进行提示
  23. $filed->editExplain('需填写真实姓名');
  24. //编辑页面label的对齐方式,默认是right,可设置为left/right
  25. $filed->editLabelAlign('left');
  26. //编辑页面中,label的显示位置控制,默认会自动生成,请参考https://2x.antdv.com/components/grid-cn/#Col 中的API-Col部分
  27. $filed->editLabelCol([
  28. 'span'=>4,
  29. ]);
  30. //编辑页面中,输入框部分的显示位置控制,默认会自动生成,请参考https://2x.antdv.com/components/grid-cn/#Col 中的API-Col部分
  31. $filed->editWrapperCol([
  32. 'span'=>18,
  33. ]);
  34. //编辑页面是否显示label后面的冒号,默认为true
  35. $filed->editColon(false);
  36. //字段是否在编辑页面中显示,默认为true
  37. $filed->editShow(false);
  38. //字段是否会在列表中显示,默认为false
  39. $filed->listShow(true);
  40. //字段在列表中显示的宽度,单位是px。默认会根据字段的类型生成一个默认宽度
  41. $filed->listColumnWidth(55);
  42. //如果设置为true,可在列表中点击表头以此字段进行升序或降序获取列表
  43. $filed->listSort(true);
  44. //列表中,列是否浮动,默认不浮动,可设置为left/right
  45. $filed->listFixed('left');
  46. //字段是否会在详情页面中显示,默认为true
  47. $filed->showPage(false);
  48. //查看页面是否显示label部分,默认为true
  49. $filed->showUseComponent(false);
  50. //字段是否可以导入的方式写入,默认为true,某些字段默认为false
  51. $filed->canExcelImport(false);
  52. //是否自动生成数据库表字段,默认为true,当模型方法generateTable返回true时有效
  53. $field->generateColumn(false);
  54. //该字段是否可以导出,默认为true
  55. $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,
        ]);
    }

示例1.gif

如:如果是男,且出生日期小于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,
        ]);
    }

示例2.gif

如:如果是女,或者出生日期小于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,
        ]);
    }

示例3.gif

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,
        ]);
    }

示例4.gif

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
        ]);
    }

示例5.gif

4.字段的事件钩子pushFieldDo

字段事件钩子

字段其他方法

1.getType() 获取字段的类型

2.removeTag($tags) 删除字段的一些标签

3.clearTag() 清空字段的标签

4.toArray() 字段转换为数组

5.validateRule() 为字段添加保存验证规则

具体规则请查看TP6的规则 https://www.kancloud.cn/manual/thinkphp6_0/1037629
使用示例:

  1. 用户名为唯一:StringField::_init_('name', '姓名')->validateRule('unique:User')
  2. 自定义验证: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() 克隆字段

只有在一个页面中需要多次出现一个字段时使用