【问题标题】:apigility set default value for the date fieldapigility 为日期字段设置默认值
【发布时间】:2016-01-08 14:14:46
【问题描述】:

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

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

这是管理字段设置的外观。

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

【问题讨论】:

    标签: php zend-framework2 laminas-api-tools


    【解决方案1】:

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

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

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

    3) 创建类似 NullToDefaultDate 过滤器的东西。它将在您的 null 字段上运行,并将 null 更改为您提供的默认日期,然后再进入您的 apigility 代码。确保您通过$this->getInputFilter()->getValues(); 或类似方法从注入的InputFilter 中获取过滤值,或者您在module.config.phpzf-content-validation 部分中设置了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 中定义的字段的过滤值,但您还将获得未经过滤的其他“垃圾”字段,您没有告诉Apigility大约在所有。如果您不想要这些,您可以启用allows_only_fields_in_filter,它只会返回您已定义的字段,但现在当传入不在列表中的字段时,您的 API 会返回 ApiProblem 错误。使用 @987654330 @ 在您的方法中将只返回您已定义的字段,它也会为您提供过滤后的值。

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

    请务必在保存前点击添加选项,否则不会保留。

    希望这会有所帮助。

    【讨论】:

    • 我没有在我的模块中看到任何服务、映射器文件。我没有看到这个 NullToDefaultDate 过滤器也不可用。你能简要介绍一下吗
    • @Gowri NullToDefaultDate 过滤器将是您需要创建的过滤器。服务、映射器等旨在代替您在资源中注入的任何依赖项,以使您的 API 做它需要做的事情。如果您正在资源中的方法中完成所有工作,那么这就是更改所在。
    • 我创建了 NullToDefaultDate 过滤器来解决我的问题。我有很多关于 apigility 的问题。在哪里可以设置快速帮助。
    猜你喜欢
    • 2019-08-19
    • 1970-01-01
    • 2021-07-10
    • 2019-03-28
    • 2015-07-06
    • 2013-12-10
    • 1970-01-01
    • 2012-11-19
    • 2013-12-14
    相关资源
    最近更新 更多