输出格式

创建Serialize类

use Astral\Serialize\Serialize;
use DateTime;

class UserLoginLog extends Serialize {
    public string $remark,
    public DateTime $create_time;
}

class User extends Serialize {
    public string $name,
    public int $age,
    public UserLoginLog $login_log
}

// 创建对象
$user = User::from([
    'name' => '张三',
    'age' => 30
], login_log: new UserLoginLog(remark:'测试数据',create_time: DateTime::createFromFormat('Y-m-d','2008-09-01')));

输出对象

// $user默认就是一个对象
echo $user->name;  // 输出: 张三
echo $user->age;   // 输出: 30
echo $user->login_log->remark; // 输出 '测试数据'
echo $user->login_log->create_time; // 输出 DateTime对象

输出数组

// 转换成数组
$vols = $user->toArray();
echo $vols['name'];  // 输出: 张三
echo $vols['age'];   // 输出: 30
echo $vols['login_log']['remark']; // 输出 '测试数据'
echo $vols['login_log']['create_time']; // 输出 2008-09-01 00:00:00
// $vols 的内容:
// [
//     'name' => '张三',
//     'age' => 30,
//     'login_log' => [
//         [
//              'remark' => '测试数据',
//              'create_time' => '2008-09-01 00:00:00'
//          ]
//     ]
// ]

输出数组json字符串

  1. Serialize 默认实现了 JsonSerializable 类似LaravelController 可以直接返回对象,框架会正常输出json信息

  2. Serialize 默认json 增加 data code message 如果需要[替换/修改/增加] 请查看配置信息 响应数据结构定义

输出json信息

  • 可以使用 api toJsonString

  • 也可以直接使用 json_decode

echo $user->toJsonString();
echo json_decode($user);
// 输出内容相同
// {"code":200,"message":"success","data":{"name":"张三","age":30,"login_log":{"remark":"测试数据","create_time":"2008-09-01 00:00:00"}}

设置输出code/message

$user->setCode(500);
$user->setMessage('操作失败');
echo json_decode($user);
// 输出内容
// {"code":500,"message":"操作失败","data":{"name":"张三","age":30,"login_log":{"remark":"测试数据","create_time":"2008-09-01 00:00:00"}}

设置自定义json外层

withResponses 可以临时增加修改自定义返回信息,全局增加返回信息可以在 响应数据结构定义中配置

$user->withResponses([
        "code"=> ["description"=>"返回code", "value"=>401],
        "message"=> ["description"=>"返回信息", "value"=>"操作成功"],
        "error"=> ["description"=>"返回error", "value"=>0],
]);
// 输出内容
// {"code":401,"message":"操作成功","error":0,"data":{"name":"张三","age":30,"login_log":{"remark":"测试数据","create_time":"2008-09-01 00:00:00"}}

输出不包含外层信息的Json

使用withoutResponseToJsonString 可以返回只有对象属性的json数据

$user->withoutResponseToJsonString();
// 输出内容
// {"name":"张三","age":30,"login_log":{"remark":"测试数据","create_time":"2008-09-01 00:00:00"}

最后更新于