【问题标题】:ZF2 apigility - How can we validate collections in json dataZF2 apigility - 我们如何验证 json 数据中的集合
【发布时间】:2015-02-23 07:02:44
【问题描述】:

如何使用 Apigility 获得经过验证的 json 值。比如我需要在下面的json数据中获取users集合下的验证user_id

{   
    "log_type": "split food",   
    "meal_type": "Break Fast",  
    "meal_date": "12-2-2015",   
    "users": [
        {
            "user_id": 1,
            "food_details": [
                {
                   "food_id":101
                }
            ]
        }
    ] 
}

我知道字段可以通过 apigility 进行验证,但这里来自 json。

谢谢

【问题讨论】:

  • 从未使用过apigility,但是如果您可以验证数组或对象,请使用json_decode并将其转换为 $fields = (array)json_decode($yourJson);或 (\Zend\Any\Class)json_decode($yourJson);

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


【解决方案1】:

您应该查看用于验证(表单)集合的 ZF2 验证文档。 Some documentation on this can be found here。 您应该像这样设置type 字段:

'type' => 'Zend\InputFilter\CollectionInputFilter',

为了验证嵌套对象(或表单字段集),您需要设置type 字段,如下所示:

'type' => 'Zend\InputFilter\InputFilter'

你可以这样使用它:

'input_filter' => array(                
    'log_type' => array(
        'validators' => array(
            // ... validators ...
        ),
        'filters' => array(
            // ... filters ...
        ),
     ),
    'meal_type' => array(
        'validators' => array(
            // ... validators ...
        ),
        'filters' => array(
            // ... filters ...
        ),
     ),
     'meal_date' => array(
        'validators' => array(
            // ... validators ...
        ),
        'filters' => array(
            // ... filters ...
        ),
     ),
    'users' => array(
        'required' => true,
        'count' => ... optional count ...
        'input_filter' => ... input filter or input filter config to use for each element ...
        'type' => 'Zend\InputFilter\CollectionInputFilter',
    ),
    'some_complex_element' => array(
        'property_of_complex_element' => array(
            'name' => 'property_of_complex_element',
            'required' => false,
            'validators' => array(
                // ... validators ...
            ),
            'filters' => array(
                // ... filters ...
            ),
        ),
        'type' => 'Zend\InputFilter\InputFilter',
     )          
),

可以在here on stackoverflow找到有关如何使用它的示例

要实现您想要的,您很可能必须将这两种解决方案结合起来。不确定这是否是最简单的方法,但绝对有可能!

编辑

对于尚未设置验证的人:

对于Apigility 中的内容验证,您必须使用zfcampus/zf-content-validation module 并按照文档进行配置。该模块允许您在 input_filter_spec 中配置您的输入过滤器和验证器,就像您通常在 ZF2 中为表单验证所做的那样。在这些input-filter 配置数组中,您可以使用我上面引用的配置。

所以首先正确安装该模块,一旦设置好,您就可以在Apigility 中使用这些验证类型。

【讨论】:

  • 这是关于 ZF 表单验证的。我在问,它怎么能在 apigility 中。
  • @shemeermali 我以为您已经设置了验证。您应该使用 zf-content-validation 模块来验证您的 json 数据,然后您可以使用我上面提到的这些配置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多