我尝试使用apigility创建简单的api来保存一些数据。我有如下表结构。使用apigility admin ui,我为下面的实体创建了Resetful post service。 createdAt
字段是可选字段,但我希望确保字段应按当前日期时间在请求中为空时提交。有人可以给出程序吗。
id integer,
name string,
createdAt datetime,
updatedAt timestamp,
以下是管理字段设置的外观。
答案 0 :(得分:1)
有很多方法可以做到这一点:
1)在持久层中默认使用某个日期或日期函数(如默认为now()
或数据库中的某些内容)。
2)在资源的创建,更新,补丁等中,检查是否已传入字段。如果没有,请创建要注入的默认时间戳。您还可以在依赖关系层中进一步向下,例如在服务,映射器或其他资源依赖关系中,这些都是有意义的。
3)创建类似NullToDefaultDate过滤器的东西。它将在您的null字段上运行,并将null更改为您在进入apigility代码之前提供的默认日期。请确保您通过$this->getInputFilter()->getValues();
或类似方式从注入的InputFilter获取过滤后的值,或者在use_raw_data = false
部分的module.config.php
中设置了zf-content-validation
。
'zf-content-validation' => array(
'YourNamespace\\V1\\Rest\\YourServiceName\\Controller' => array(
'input_filter' => 'YourNamespace\\V1\\Rest\\YourServiceName\\Validator',
'use_raw_data' => false,
'allows_only_fields_in_filter' => true,
)
)
如果你只是使用了'use_raw_data' =>是的,您将获得您在Apigility中定义的字段的过滤值,但您还会获得未经过滤的额外垃圾"垃圾"你根本没有告诉Apigility的领域。如果您不想要这些内容,则可以启用allows_only_fields_in_filter
,它只会返回您已定义的字段,但现在您的API会在列表中没有的字段时返回ApiProblem错误传入。在您的方法中使用$data = $this->getInputFilter()->getValues()
将只返回您已定义的字段,它也会为您提供过滤值。
对于问题的第二部分,您希望使用Zend \ Validator \ Date验证器并添加格式选项' Y-m-d H:i:s'。
请确保在保存之前单击“添加选项”,否则它将无法保留。
希望这有帮助。