## 回调方法 如果某些字段的值需要特别处理,可以设置回调方法。 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', 'format_time') ->fetch(); ~~~ 回调有以下几种用法 ### 1.输入有效的函数 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', 'format_time') ->fetch(); ~~~ 其中`format_time`是一个有效的函数。 >[info] 系统默认会将该字段值传入到指定的回调方法内 也可以添加额外参数 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', 'format_time', 'Y-m-d') ->fetch(); ~~~ 其中,'Y-m-d'会被当作第二参数传入函数`format_time`内。 额外参数也可以是一个变量。 ~~~ $format = 'Y-m-d'; // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', 'format_time', $format) ->fetch(); ~~~ ### 2.使用匿名函数 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', function($value){ return format_time($value); }) ->fetch(); ~~~ >[danger] 使用匿名函数时,可以定义一个参数来接收字段值。该匿名函数要有返回值,否则页面不显示该字段的值。 也可以不接收字段值,而直接返回数据。 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', function(){ return '禁止查看'; }) ->fetch(); ~~~ 匿名函数同样可以接收第二个参数 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', function($value, $format){ return format_time($value, $format); // $format 在这里的值是“Y-m” }, 'Y-m') ->fetch(); ~~~ >[info] 提示:如果额外参数是`__data__`,则会把整行数据当做第二个参数传给回调方法 比如我们希望在create_time的回调方法内,能接收到其他字段的值。 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('name', '用户名') ->addColumn('create_time', '创建时间', 'callback', function($value, $data){ return $data['name']; // 可以用$data接收到其他字段的数据 }, '__data__') ->fetch(); ~~~ ### 3.以数组方式输入对象和方法 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', [$this, 'format_time']) // 表示执行当前对象的format_time方法,并将值传入format_time方法中 ->fetch(); ~~~ 也可以传入额外参数 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', [$this, 'format_time'], 'Y-m') ->fetch(); ~~~ 或者传入变量 ~~~ $format = 'Y-m'; // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', [$this, 'format_time'], $format) ->fetch(); ~~~ >[info] 建议不要在回调方法内去查询数据库,这样会造成频繁访问数据库 ### 支持传入任意个参数(1.0.3+) 从1.0.3版本开始,“callback”支持传入任意个参数。 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', function($value, $a, $b, $c){ // $value 字段create_time的值 // $a的值为“参数1” // $b的值为“参数2” // $c的值为“参数3” }, '参数1', '参数2', '参数3') ->fetch(); ~~~ `__data__`可以放在任意位置。 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_time', '创建时间', 'callback', function($value, $a, $b, $c){ // $value 字段create_time的值 // $a的值为“参数1” // $b的值为“参数2” // $c的值为当前行的所有字段值 }, '参数1', '参数2', '__data__') ->fetch(); ~~~ >[info]如果某些字段是不存在的,使用callback时,无需接收该字段的变量。 ~~~ // 使用ZBuilder构建数据表格 return ZBuilder::make('table') ->addColumn('create_at', '创建时间', 'callback', function($data){ // create_at字段是不存在的,所以匿名函数的不用再定义一个$value变量来接收值 }, '__data__') ->fetch(); ~~~