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

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

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

例如,一个订单可能在用于创建订单的单个 POST 请求中包含订单项目的集合。订单和订单项都作为资源存在。但是,我非常希望只有一个可以创建订单和订单项实体的请求。在资源中处理它不是问题,但我想知道您将如何使用 apigiliy UI 配置该资源(我们称之为 order-place) - 或者,如果根本不可能,使用配置。应用验证器和过滤器是 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}
    ...
]
}

最佳答案

从威尔特的回答开始,我发现以下代码也有效:

# 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 都看不到任何区别。作为 name 的数组和 street或虚拟字符串。

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

相关文章:

PHPUnit 测试和 Doctrine,连接太多

php - php Action 干扰CSS

jQuery 验证 - 如何忽略字母大小写?

php - 此帐户未设置 PayPal Express Checkout

c# - 参数组合的 ArgumentException

validation - Primefaces编辑器的验证

php - ZF2在模型中使用OR

php - Doctrine 2 和 Zend Framework 2.2 的数据库名称注释

PHP 流明 : Ignore Middleware in API Tests

php - 嵌套div中的表单文本字段不可点击