## autoEdit('表单项' [, '表名', '验证器名', '自动插入时间戳', '时间格式', '是否弹窗']) | 版本 | 功能 | | --- | --- | | 1.0.5 | 支持弹窗 | 和[自动添加按钮](自动添加按钮.md)用法相类似 ~~~ // 读取用户数据 $data_list = Db::name('admin_user')->select(); // 定义新增或编辑页面的字段 $fields = [ ['hidden', 'id'], ['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) // 添加新增按钮 ->autoEdit($fields) // 添加编辑按钮 ->setRowList($data_list) // 设置表格数据 ->fetch(); ~~~ >[danger]需要注意的是,编辑需要用到主键字段,一般会设置为隐藏,比如上面的`['hidden', 'id']` ### 表单项 表单项是一个数组,每个元素表示一个字段数据,具体用法可以参考[添加表单项通用方法](添加表单项通用方法.md)。 ### 表名 如果你的数据表名是`当前模块名_当前控制器名`,那么无需填写这个参数。假如不是,那么需要填写对应的表名,比如: ~~~ ->autoEdit($fields, 'admin_user') ~~~ ### 验证器名 如果编辑数据的时候,需要用到验证器,那么可以填写验证器名,如果不需要用到验证器,那么可以不写或者填写空值。 默认情况下,填写`true`的话,系统会去使用验证器名为**当前控制器名**的验证器。比如当前控制器是Index,那么就会去调用Index验证器。 ~~~ ->autoEdit($fields, 'admin_user', true) ~~~ 如果不填写,那么提交表单的时候,则不会验证数据,而是直接写入数据。 也可以指定验证器名 ~~~ ->autoEdit($fields, 'admin_user', 'User') ~~~ ### 自动更新时间戳 如果编辑数据的时候想自动插入创建时间和更新时间,那么可以这样写 ~~~ ->autoEdit($fields, 'admin_user', 'User', true) ~~~ 提交表单的时候,DolphinPHP会自动更新当前**时间戳**到字段名为`update_time`的字段中。 >[danger] 前提是表中有这个字段。 如果表中的时间字段不是`update_time`而是其他,比如`update_at`,那么也可以直接写 ~~~ ->autoEdit($fields, 'admin_user', 'User', 'update_at') ~~~ 当然,也可以利用表单项的`hidden`类型来添加,比如 ~~~ // 定义编辑页面的字段 $field = [ ['hidden', 'id'], ['text', 'username', '用户名', '必填,可由英文字母、数字组成'], ['text', 'nickname', '昵称', '可以是中文'], ['select', 'role', '角色', '', RoleModel::getTree(null, false)], ['text', 'email', '邮箱', ''], ['password', 'password', '密码', '必填,6-20位'], ['text', 'mobile', '手机号'], ['image', 'avatar', '头像'], ['radio', 'status', '状态', '', ['禁用', '启用'], 1], ['hidden', 'update_time', $this->request->time()] ]; ~~~ >[info] 如果在编辑数据前需要复杂处理的,建议自己创建edit方法 ### 自定义时间格式 从`1.0.3`版本开始,支持自定义时间字段的格式,默认为时间戳,如果想以普通时间格式存储的话,可以这样指定。 ~~~ ->autoEdit($fields, 'admin_user', 'User', true, 'Y-m-d') ~~~ 那么添加数据的时候,会自动添加create_time字段和update_time字段,它们的格式为:`Y-m-d`. 或者单独对某个字段的格式进行指定。 ~~~ ->autoEdit($fields, 'admin_user', 'User', 'create_time|Y-m-d') // create_time字段写入的时间格式为Y-m-d ~~~ 没有指定时间格式的字段,将默认为时间戳格式 ~~~ ->autoEdit($fields, 'admin_user', 'User', 'create_time|Y-m-d,update_time') ~~~ `create_time`字段写入的时间格式为`Y-m-d`,而`update_time`为时间戳。 如果指定了时间格式,那么没有明确指定格式的字段,将统一使用后面指定的格式。 ~~~ ->autoEdit($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`。 ### 是否弹窗 >[info] 从1.0.5版本开始,支持设置为弹窗 ~~~ ->autoEdit($fields, 'admin_user', 'User', '', '', true) ~~~