ZF2 apigility-我们如何验证json数据中的集合


ZF2 apigility - How can we validate collections in json data

如何使用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。

感谢

您应该查看ZF2验证文档以验证(表单)集合。有关这方面的一些文档可以在这里找到。您应该这样设置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',
     )          
),

关于如何使用它的示例可以在堆栈溢出上找到

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

编辑

对于那些还没有设置验证的人:

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

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