我的任务是为 JSON 模式定义的对象创建一个类。最初我只是想根据模式构建类,但现在我被告知它应该从模式本身自动生成。
我希望类为其成员提供 set/get 方法。
解决这个问题的最佳方法是什么?
使用 swaggest/php-code-builder 您可以在映射过程中生成带有访问器方法和验证的 PHP 类。
映射和验证由 swaggest/json-schema 提供支持,这是一种快速且兼容的 JSON 模式实现。
生成的类是 IDE 友好的,因此您可以自动完成所有属性。
请注意,下面的包已被放弃,不再维护。没有建议更换包。
我为此用例编写了一个包: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
希望这有帮助。
我认为你有几个选择。
__call()
拦截对 getFoo()
或 setBar()
的调用,并可以执行必要的验证和返回值。在这两种情况下,我认为棘手的部分是如果您一路上遇到引用类型。不过,如果您的架构相当简单,那应该不会太糟糕。
祝你好运!