autoAdd("表单项" [, "表名", "验证器名", "自动插入时间戳", "时间格式", "是否弹窗"])
版本 | 功能 |
---|---|
1.0.5 | 支持弹窗 |
如果用addTopButton("add")
来添加”新增“按钮,那么新增的方法需要自己实现,也就是在当前控制器下,新建一个add方法来创建表单,并且写入数据。
追求极简的开发是DolphinPHP的核心思想之一,为了节省开发者的宝贵时间,我们为大家准备了一个神奇的方法,可以让开发者无需编写add方法也能实现创建表单和写入数据。
// 读取用户数据
$data_list = Db::name("admin_user")->select();
// 定义新增页面的字段
$fields = [
["text", "username", "用户名", "必填,可由英文字母、数字组成"],
["text", "nickname", "昵称", "可以是中文"],
["select", "role", "角色", "", RoleModel::getTree(null, false)],
["text", "email", "邮箱", ""],
["password", "password", "密码", "必填,6-20位"],
["text", "mobile", "手机号"],
["image", "avatar", "头像"],
["radio", "status", "状态", "", ["禁用", "启用"], 1]
];
// 使用ZBuilder构建数据表格
return ZBuilder::make("table")
->addColumn("id", "ID")
->addColumn("username", "用户名")
->addColumn("nickname", "昵称")
->addColumn("email", "邮箱")
->addColumn("mobile", "手机号")
->addColumn("create_time", "创建时间")
->addColumn("right_button", "操作", "btn")
->autoAdd($fields) // 添加新增按钮
->setRowList($data_list) // 设置表格数据
->fetch();
就这么简单,点击页面上的”新增“按钮,就添加数据了。
表单项
表单项是一个数组,每个元素表示一个字段数据,具体用法可以参考添加表单项通用方法。
表名
如果你的数据表名是当前模块名_当前控制器名
,那么无需填写这个参数。假如不是,那么需要填写对应的表名,比如:
->autoAdd($fields, "admin_user")
验证器名
如果新增数据的时候,需要用到验证器,那么可以填写验证器名,如果不需要用到验证器,那么可以不写或者填写空值。
默认情况下,填写true
的话,系统会去使用验证器名为当前控制器名的验证器。比如当前控制器是Index,那么就会去调用Index验证器。
->autoAdd($fields, "admin_user", true)
如果不填写,那么提交表单的时候,则不会验证数据,而是直接写入数据。
也可以指定验证器名
->autoAdd($fields, "admin_user", "User")
自动插入时间戳
如果新增数据的时候想自动插入创建时间和更新时间,那么可以这样写
->autoAdd($fields, "admin_user", "User", true)
提交表单的时候,DolphinPHP会自动添加当前时间戳到字段名为create_time
和update_time
的字段中。
前提是表中有这个两个字段。
如果只想写入其中一个字段,比如create_time,那么可以这样写
->autoAdd($fields, "admin_user", "User", "create_time")
或者干脆两个都指明
->autoAdd($fields, "admin_user", "User", "create_time,update_time")
如果表中的时间字段不是create_tiem
而是其他,比如create_at
,那么也可以直接写
->autoAdd($fields, "admin_user", "User", "create_at")
当然,也可以利用表单项的hidden
类型来添加,比如
// 定义新增页面的字段
$fields = [
["text", "username", "用户名", "必填,可由英文字母、数字组成"],
["text", "nickname", "昵称", "可以是中文"],
["select", "role", "角色", "", RoleModel::getTree(null, false)],
["text", "email", "邮箱", ""],
["password", "password", "密码", "必填,6-20位"],
["text", "mobile", "手机号"],
["image", "avatar", "头像"],
["radio", "status", "状态", "", ["禁用", "启用"], 1],
["hidden", "create_time", $this->request->time()],
["hidden", "update_time", $this->request->time()]
];
如果在添加数据前需要复杂处理的,建议自己创建add方法
自定义时间格式
从1.0.3
版本开始,支持自定义时间字段的格式,默认为时间戳,如果想以普通时间格式存储的话,可以这样指定。
->autoAdd($fields, "admin_user", "User", true, "Y-m-d")
那么添加数据的时候,会自动添加create_time字段和update_time字段,它们的格式为:Y-m-d
.
或者单独对某个字段的格式进行指定。
->autoAdd($fields, "admin_user", "User", "create_time|Y-m-d") // create_time字段写入的时间格式为Y-m-d
没有指定时间格式的字段,将默认为时间戳格式
->autoAdd($fields, "admin_user", "User", "create_time|Y-m-d,update_time")
create_time
字段写入的时间格式为Y-m-d
,而update_time
为时间戳。
如果指定了时间格式,那么没有明确指定格式的字段,将统一使用后面指定的格式。
->autoAdd($fields, "admin_user", "User", "create_time|Y-m-d,update_time,log_time", "Y/m/d H:i")
create_time
字段写入的时间格式为Y-m-d
,而update_time
和log_time
的格式为Y/m/d H:i
。
是否弹窗
从1.0.5版本开始,支持设置为弹窗
->autoAdd($fields, "admin_user", "User", "", "", true)