Field 类
Field 类是所有字段插件的基类,不可实例化。
Field 的公开属性,可用于设置的属性
public string $label = '';
可在注解种设置字段标题,
public string $name = '';
字段名称,只读,Model 的被注解的属性名称就是 name
public bool $close = false;
可在注解中设置 是否关闭字段,如果设置为 true 则该字段不参与表单操作。
public bool $viewClose = false;
可在注解中设置 关闭你视图,如果设置为 true ,则 表单Form->getViewFields() 不会被加入。
public int $viewMerge = 0
可在注解中设置 合并选项,
0 为不合并,
1 为向下合并,即将自己添加到下一个字段的 prev 属性去。
-1 为向上合并 ,即将自己添加到上一个字段的 next 属性去。
public bool $hidden = false;
可在注解中设置 是否加入到 表单的 隐藏域中去, 如果设置为ture 需要 使用表单 Form->fetchHideBox() 来显示。
public bool $offEdit = false;
可在注解中设置 是否在表单为 edit 编辑模式时,关闭编辑,即不会修改该字段的任何内容。也不会在表单 Form->getData() 中获取到值。
public bool $offJoin = false;
可在注解中设置 是否要取消加入到 所获取的数据中 ,如果设置为 TRUE 则 在表单 Form->getData() 中获取到值返回的数组中将没有该字段。
public string $before = '';
可在注解中设置 在输入框之前的文本,比如 从【 】 到【 】
public string $after = '';
可在注解中设置 在输入框之后的文本,如单位 【 】件, 【 】元
public string $prompt = '';
可在注解中设置 提示说明的短语。
public bool $star = false;
可在注解中设置 是否标 * 需要在模板中读取值来设置。
public string $tabIndex = '';
可在注解中设置 设置字段所在的标签组。
public array $valid = [];
验证数据的规则配置。
在注解中一般使用如下字段配置
注解中设置
validRule: ['r' => '请输入用户密码', 'minLen' => [6, '用户密码长度至少是6位以上']]
配置验证规则,对应设置的是 $valid['rule']
validGroup:[['r' => '请填写省份'],['r' => '请填写城市']]
如果有多组,如联动下拉框 对应设置的是 $valid['group']
validDisabled:true
关闭控件, 如联动下拉框 对应设置的是 $valid['disabled']
validFunc:['MyClass','myFunc']
使用自己的函数验证,对应设置的是 $valid['func']
除此之外 还有
validDefault:'默认提示',
validCorrect:'正确提示',
validError:'直接提示错误',
validDisplay:'#errorId' //将错误信息打印在哪个html 标签上
分别对应 的是
$valid['default']
$valid['correct']
$valid['error']
$valid['display']
具体的规则配置,可另看验证规则配置说明。
array $attrs = [];
仅可在注解中设置,不可在控制器等代码环境中设置。
控件的属性 如样式 style 样式名称 class 及其他 属性设置。
如:
attrs:[
'class'=>'form-inp text',
'style'=>'width:30px',
'placeholder'=>'请输入用户密码'
],
控制器或者代码环境中设置或者读取使用
setAttr(string $name, mixed $value)
和
getAttr(string $name): mixed
进行设置和读取。
public string $boxName;
只读,不可在注解中设置,控件的name 属性 如<input name='username'/>
在注解中 使用
attrs:['name'=>'username']
设置
public string $boxId;
只读,不可在注解中设置,控件的 id 属性 如<input id='username'/>
在注解中 使用
attrs:['id'=>'username']
设置
public ?array $dynamic = null
可在注解中设置 动态开关验证,及显示控制 (需要 YeeUI 库支持)。
格式如下:
dynamic:[
[
'eq'=>1, //当值为1 的时候 显示 username,password 控件,隐藏 intro
'show'=>'username,password',
'hide'=>'intro'
],
[
'neq'=>1, //当值不为1 的时候 显示 intro 控件,隐藏 username,password
'show'=>'intro',
'hide'=>'username,password'
]
]
或者 开关验证规则
dynamic:[
[
'eq'=>1, //当值为1 的时候 开启 username,password 控件验证,关闭 intro 的验证。
'on'=>'username,password',
'off'=>'intro'
],
[
'neq'=>1, //当值不为1 的时候 开启 intro 控件的验证,关闭 username,password的验证。
'on'=>'intro',
'off'=>'username,password'
]
]
可以支持多项控制。如果要控制显示和隐藏 需要给控件所在的容器添加 id='对应id-row'
如果 username 名称的控件所在的容器 div 否则 YeeUI 无法识别到对应的显示区域进行控制显示或者隐藏,一般的 如果隐藏控件,将会关闭验证,相反的显示控件会开启验证。
<div id="{$field->boxId}-row">
<label>{$field->label}</label><div>{input field=$field}</div>
</div>
public string|array|null $defaultFunc = null;
指定函数名设置默认值:
在使用默认值函数是,当前的字段属性值必须是 null.
如在Model 中
class UserModel
{
#[Date(
label: '选择日期1',
defaultFunc: [self::class, 'getDate']
)]
public string $date1 = ''; //这里默认值不是 null 不会调用 defaultFunc 设置的方法 设置默认值
#[Date(
label: '选择日期2',
defaultFunc: 'time' //使用内置函数
)]
public int $date2 = 0; //这里默认值不是 null 不会调用 defaultFunc 设置的方法 设置默认值
#[Date(
label: '选择日期1',
defaultFunc: [self::class, 'getDate']
)]
public ?string $date3 = null; //这里默认值是 null 会调用 defaultFunc 设置的方法 设置默认值
#[Date(
label: '选择日期2',
defaultFunc: 'time' //使用内置函数
)]
public ?int $date4 = null; //这里默认值是 null 会调用 defaultFunc 设置的方法 设置默认值
public static function getDate(): string
{
return date('Y-m-d');
}
}
public string $defaultFromParam = '';
从传递的参数中获取表单默认值
如从URL或者其他表单post过来的数据中获得默认值,同 defaultFunc 一样,需要设置默认值的Model属性字段 值必须是 null 才能设置。
#[Integer(
label: '父ID',
defaultFromParam:'pid'
)]
public ?int $pid = null;
使用实例:
在一个Model 中的使用例子:
#[Text(
label: '用户名',
tabIndex: 'base',
validRule: ['r' => '请输入用户名'],
validDisabled: true,
validFunc: ['MyClass', 'myFunc'],
validDefault: '默认提示',
validCorrect: '正确提示',
validError: '直接提示错误',
validDisplay: '#errorId', //将错误信息打印在哪个html 标签上
offEdit: true,
attrs: [
'class' => 'form-inp text',
'style' => 'width:300px',
'placeholder' => '请输入用户名'
],
)]
public string $username = '';
#[Select(
label: '选项类型',
tabIndex: 'base',
offEdit: true,
attrs: [
'class' => 'form-inp select',
'style' => 'width:30px',
],
dynamic: [
[
'eq' => 1, //当值为1 的时候 开启 username,password 控件验证,关闭 intro 的验证。
'show' => 'username,password',
'hide' => 'intro'
],
[
'neq' => 1, //当值不为1 的时候 开启 intro 控件的验证,关闭 username,password的验证。
'on' => 'intro',
'off' => 'username,password'
]
],
options: [
['value' => 1, 'text' => '显示用户名及密码 隐藏介绍'],
['value' => 2, 'text' => '隐藏用户名及密码 显示介绍']
]
)]
public string $kind = '';
由于所有的控件都会继承字 Field 所以这些设置项对所有控件是一致的。
其他设置项将有控件扩展补充。