回调方法

如果某些字段的值需要特别处理,可以设置回调方法。

// 使用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是一个有效的函数。

系统默认会将该字段值传入到指定的回调方法内

也可以添加额外参数

// 使用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();

使用匿名函数时,可以定义一个参数来接收字段值。该匿名函数要有返回值,否则页面不显示该字段的值。

也可以不接收字段值,而直接返回数据。

// 使用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();

提示:如果额外参数是__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();

建议不要在回调方法内去查询数据库,这样会造成频繁访问数据库

支持传入任意个参数(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();

如果某些字段是不存在的,使用callback时,无需接收该字段的变量。

// 使用ZBuilder构建数据表格
return ZBuilder::make('table')
    ->addColumn('create_at', '创建时间', 'callback', function($data){
			// create_at字段是不存在的,所以匿名函数的不用再定义一个$value变量来接收值
    }, '__data__')
    ->fetch();