[英]How to validate nested data following Apigility way?
我有一個關於驗證嵌套json
數據的小問題。 例如,我有類似的PATCH
請求:
{
"awesome": "yes",
"myObject": {
"some_property": "Text Example value",
"another_property": "1965"
}
}
為這個嵌套數據some_property
和another_property
設置過濾器和驗證器的正確方法是什么?
非常感謝您的回答
我知道這個答案已經很晚了。 我偶然發現了同樣的問題(與Apigility無關)。 經過大量的嘗試和錯誤后,我發現了一個完全有效的InputFilter
規范,用於驗證嵌套字段/集合以及名為type
鍵。 在這里添加這個以供參考,其他人會發現這個(你好,以后我)。
已經由威爾特回答,添加完整性。
$data = [
'root-key' => [
'sub-key' => 'my-value',
'sub-key2' => 'my-other-value',
],
'simple-key' => 'simple-value'
];
'input_filter_specs' => [
'my-filter' => [
'root-key' => [
'type' => InputFilter::class,
'sub-key' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
'sub-key2' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
],
'simple-key' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
],
],
由於某種原因,驗證對象集合的規范有點不同:
$data = [
'root-key' => [[
'sub-key' => 'my-value',
'sub-key2' => 'my-other-value',
], [
'sub-key' => 'my-value',
'sub-key2' => 'my-other-value',
]],
'simple-key' => 'simple-value'
];
'input_filter_specs' => [
'my-filter' => [
'root-key' => [
'type' => CollectionInputFilter::class,
'required' => true,
'input_filter' => [
'sub-key' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
'sub-key2' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
]
],
'simple-key' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
],
],
type
限制/重復使用過濾器規范 使用type
鍵,可以指定輸入過濾器的類型(如前面的兩個示例中所述)。 然而,很少有人知道指定的過濾器也隱含地是輸入過濾器,也可以指定為類型。 這允許在其他過濾器中重復使用指定的過濾器,並從較小的過濾器中組合復雜的過濾器。 只需將指定輸入過濾器的名稱作為type
傳遞即可。
$data = [
'root-key' => [
'sub-key' => 'my-value',
'sub-key2' => 'my-other-value',
],
'simple-key' => 'simple-value'
];
'input_filter_specs' => [
'root-key-filter' => [
'sub-key' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
'sub-key2' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
],
'my-filter' => [
'root-key' => [
'type' => 'root-key-filter',
],
'simple-key' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
],
],
這樣做允許您在新創建的輸入過濾器中使用type
名稱:
$data = [
'root-key' => [
'type' => 'my-value',
],
];
'input_filter_specs' => [
'root-key-filter' => [
'type' => [
'required' => true,
'filters' => [ /** Add filters **/ ],
'validators' => [ /** Add validators **/],
],
],
'my-filter' => [
'root-key' => [
'type' => 'root-key-filter',
],
],
],
我希望這個遲到的答案對那里的任何人都有用。 威爾茨回答肯定是,並把我帶到了正確的軌道上。
您可以在過濾器和驗證器中設置嵌套數據,就像在ZF2中對字段集一樣 。
return array(
'awesome' => array(
'name' => 'awesome',
'required' => true,
'filters' => array(
//...
),
'validators' => array(
//...
)
),
'myObject' => array(
'some_property' => array(
'name' => 'some_property',
'required' => true,
'filters' => array(
//...
),
'validators' => array(
//...
)
),
'another_property' => array(
'name' => 'another_property',
'required' => true,
'filters' => array(
//...
),
'validators' => array(
//...
)
),
// Type key necessary for nested fields
'type' => 'Zend\InputFilter\InputFilter'
)
);
檢查更多信息以及如何在此處配置ZF內容驗證StackOverfow上的另一個問題或此處的Content-Validation模塊文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.