addColumn("create_time", "创建时间", "callback", "format_time") ->fetch(); 回调" />
牛骨文教育服务平台(让学习变的简单)

回调方法

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

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