apigility设置日期字段的默认值

时间:2016-01-08 14:14:46

标签: php zend-framework2 apigility

我尝试使用apigility创建简单的api来保存一些数据。我有如下表结构。使用apigility admin ui,我为下面的实体创建了Resetful post service。 createdAt字段是可选字段,但我希望确保字段应按当前日期时间在请求中为空时提交。有人可以给出程序吗。

id integer,
name string,
createdAt datetime,
updatedAt timestamp,

以下是管理字段设置的外观。

我也想知道如何设置验证器以允许用户输入createdAt作为“Y-m-d H:i:s”格式。你能指导我吗? enter image description here

1 个答案:

答案 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'。

Apigility Admin Format for Date Validator

请确保在保存之前单击“添加选项”,否则它将无法保留。

希望这有帮助。