apigility 为日期字段设置默认值

apigility set default value for the date field

我尝试使用 apigility 创建简单的 api 来保存一些数据。我有如下的 table 结构。使用 apigility admin ui,我为以下实体创建了 Resetful post 服务。 createdAt 字段是可选的,但我想确保该字段在请求中为空白时应在当前日期时间之前提交。谁能给个程序做一下。

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

这是管理字段设置的样子。

我还想知道如何设置验证器以允许用户以 "Y-m-d H:i:s" 格式输入 createdAt。你能给我uide我吗

您可以通过多种方式执行此操作:

1) 将持久层中的某些日期或日期函数设为默认值(如将其设为默认值 now() 或数据库中的某些内容)。

2) 在你的资源的create、update、patch等中,检查是否传入了该字段。如果没有,则创建一个默认时间戳进行注入。您也可以在您的依赖层中进一步执行它,例如在您的服务、映射器或其他资源依赖项中,只要它有意义。

3) 创建类似 NullToDefaultDate 过滤器的东西。它将 运行 在您的空字段上,并将空字段更改为您提供的默认日期,然后再进入您的敏捷代码。确保您通过 $this->getInputFilter()->getValues(); 或类似方式从注入的 InputFilter 中获取过滤值,或者您已经在 zf-content-validation 部分的 module.config.php 中设置了 use_raw_data = false

'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' => false,您将获得您在 Apigility 中定义的字段的过滤值,但您还将获得未过滤的额外 "garbage" 字段你根本没有告诉 Apigility。如果你不想要那些,你可以启用 allows_only_fields_in_filter 这只会给你返回你定义的字段,但现在你的 API return 一个 ApiProblem 错误,当一个字段不是在列表中被传入。在你的方法中使用 $data = $this->getInputFilter()->getValues() 将只返回你定义的字段,它也会为你提供过滤后的值。

对于问题的第二部分,您想使用 Zend\Validator\Date 验证器并添加格式选项 'Y-m-d H:i:s'。

保存前一定要点击添加选项,否则不会保留。

希望这对您有所帮助。