php - POST 请求中的嵌套参数/值

标签 php validation zend-framework2 laminas-api-tools input-filter

我一直在考虑一种处理对灵活资源的 POST 请求中的嵌套/复杂值的好方法。

例如,在用于创建订单的单个 POST 请求中,订单可能包含订单商品的集合。 order 和 order-item 都作为资源存在。但是,我非常希望只有一个请求可以创建订单和订单项实体。在资源中处理它不是问题,但我想知道您将如何使用 apigiliy UI 配置该资源(我们称之为订单)——或者,如果根本不可能,使用配置。应用验证器和过滤器是 apigility 的关键特性之一,我想继续使用它,即使是对于复杂的请求数据。

在您提问之前,不应该使用下划线分隔值范围,例如 order_comment 和 order_item_comment。

有什么想法吗?:)

添加:示例 json 请求负载可能如下所示:

{
"created_at": "2000-01-01",
"amount" : "5000.00",
"address" : {
    "name": "some name",
    "street": "some street"
    ...
},
"items" : [
    {"productId":99,"qty":1}
    ...
]
}

最佳答案

从 Wilt 的回答开始,我发现以下代码也能正常工作:

# file path: /module/MyApi/config/module.config.php

// some other stuff

  'MyApi\\V1\\Rest\\MyRestService\\Validator' => array(
       'address' => array(
            0 => array(
                'name'     => 'name',
                'required' => true,
                'filters'  => array(),
                'validators' => array(),
            ),
            1 => array(
                'name'     => 'street',
                'required' => true,
                'filters'  => array(),
                'validators' => array(),
            ),
            'type' => 'Zend\InputFilter\InputFilter'
        ),
        'amount' => array(
            'name'       => 'amount',
            'required'   => true,
            'filters'    => array(),
            'validators' => array()
        )

我遇到的唯一问题是当 address 作为字段(字符串或数字)而不是数组或对象传递时。在这种情况下,Apigility 抛出异常:

Zend\InputFilter\Exception\InvalidArgumentException: Zend\InputFilter\BaseInputFilter::setData expects an array or Traversable argument; received string in /var/www/api/vendor/zendframework/zendframework/library/Zend/InputFilter/BaseInputFilter.php on line 175

添加 address 作为一个更简单的(必需的)字段可以避免异常,但是无论我们将 address 作为 的数组传递,Apigility 都看不到任何区别>namestreet 或虚拟字符串。

关于php - POST 请求中的嵌套参数/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297266/

相关文章:

php - 该数据是否被另一个组件覆盖?

zend-framework2 - 使用 composer 安装组件 zf2

javascript - 如何获取PHP回显的div内容

php - 插入到已有数据的表中

javascript - 如何验证在javascript中只接受第一个字母作为字符并保留为数字

CSS 验证器使用 CSS 动画媒体查询抛出解析错误

php - ZF2 -\Zend\Db\Adapter\Platform::getQuoteIdentifierSymbol() 函数

controller - ZF2 - 访问 Controller 中的数据库适配器

php - 列出目录目录内的文件

javascript - 找不到文件,图表不出现