我的任务是为JSON模式定义的对象创建一个类。最初我只是打算基于模式构建类,但现在我被告知它应该从模式本身自动生成。
我希望该类为其成员设置/获取方法。
最好的方法是什么?
答案 0 :(得分:3)
使用swaggest/php-code-builder,您可以在映射期间使用访问器方法和验证生成PHP类。
映射和验证由swaggest/json-schema提供支持,{{3}}是一种快速且兼容的JSON模式实现。
生成的类是IDE友好的,因此您可以自动完成所有属性。
答案 1 :(得分:0)
我认为你有几个选择。
__call()
拦截对getFoo()
或setBar()
的调用,并执行必要的验证和返回值。在这两种情况下,我认为如果您在此过程中遇到参考类型,那将是棘手的部分。但是,如果您的架构相当简单,那么它应该不会太糟糕。
祝你好运!答案 2 :(得分:0)
我为这个用例编写了一个包:https://packagist.org/packages/dto/dto
我们的想法是能够将对象定义为JSON模式,以便其他服务可以使用这些定义,然后使用这些相同的JSON模式在内部定义PHP对象。
<?php
class Example extends Dto\Dto
{
protected $schema = [
'type' => 'object',
'properties' => [
'a' => ['type' => 'string'],
'b' => ['type' => 'string']
],
'additionalProperties' => false
];
}
使用这个软件包时有些事情很棘手(并且通常严格遵守PHP中的类型):
if ($dto->my_integer > 3) { // generates an error!
相反,您必须显式地将值转换为标量值(由JSON模式定义定义):
if ($dto->my_integer->toScalar() > 3) { // works
希望这有帮助。