0

我正在尝试验证以下 json 文件,但找不到访问“地址”子项的方法,我该怎么做?一切都很好,直到它尝试访问“地址”字段。

杰森:

{
"first_name": "Test",
"last_name": "Test",
"email": "test@gmail.com",
"mobile_phone": 123456789,
"address": {
    "country": "Test",
    "postal_code": "Test",
    "city": "Test",
    "street": "Test",
    "number": "Test",
    "floor": "Test",
    "door": "Test"
},
"password": "Test",
"birth_date": "2005-12-30"
}

代码:

$data = $this->validator->validate($request, [
        "first_name" => v::stringVal()->notEmpty(),
        "last_name" => v::stringVal()->notEmpty(),
        "email" => v::notEmpty()->email(),
        "mobile_phone" => v::intVal()->notEmpty(),
        "address" =>[
            "country" => v::stringVal()->notEmpty(),
            "postal_code" => v::stringVal()->notEmpty(),
            "city" => v::stringVal()->notEmpty(),
            "street" => v::stringVal()->notEmpty(),
            "number" => v::stringVal()->notEmpty(),
            "floor" => v::stringVal()->notEmpty(),
            "door" => v::stringVal()->notEmpty(),
        ],
        "password" => v::base64()->notEmpty(),
        "birth_date" => v::date()->notEmpty()
    ]);
4

2 回答 2

0

看起来您正在使用 Respect\Validation\Validator。我们可以使用链式验证和Key验证子数组的函数,如文档中所示。

$data = [
    'parentKey' => [
        'field1' => 'value1',
        'field2' => 'value2'
        'field3' => true,
    ]
];

使用下一个规则组合,我们可以验证子键。

v::key(
    'parentKey',
    v::key('field1', v::stringType())
        ->key('field2', v::stringType())
        ->key('field3', v::boolType())
    )
    ->assert($data); // You can also use check() or validate()

应用于您的数据,验证可能如下所示:

use Respect\Validation\Validator as v;

$json = json_decode('{
    "first_name": "Test",
    "last_name": "Test",
    "email": "test@gmail.com",
    "mobile_phone": 123456789,
    "address": {
        "country": "Test",
        "postal_code": "Test",
        "city": "Test",
        "street": "Test",
        "number": "Test",
        "floor": "Test",
        "door": "Test"
    },
    "password": "Test",
    "birth_date": "2005-12-30"
    }', true);
    
v::create()
    ->key('first_name', v::stringType()->length(1, 32))
    ->key('last_name', v::stringVal()->notEmpty())
    //->..
    ->key('address',
        v::key('country', v::stringType()->length(1, 32))
        ->key('postal_code', v::stringType()->length(1, 32))
        ->key('city', v::stringType()->length(1, 32))
        //->..
    )
    ->key('password', v::stringVal()->notEmpty())
    ->key('birth_date', v::stringVal()->notEmpty())
    ->assert($json); // You can also use check() or validate()
于 2020-09-29T22:47:31.863 回答
0

这就是访问json的孩子的方式:

$this->validator->validate($request, [
        "first_name" => v::stringVal()->notEmpty(),
        "last_name" => v::stringVal()->notEmpty(),
        "email" => v::notEmpty()->email(),
        "mobile_phone" => v::intVal()->notEmpty(),
        "address" => v::notEmpty()
            ->key("country", v::stringVal()->notEmpty())->key("postal_code", v::stringVal())->key("city", v::stringVal()->notEmpty())->key("street", v::stringVal()->notEmpty())->key("number", v::stringVal())->key("floor", v::stringVal())->key("door", v::stringVal()),
        "password" => v::base64()->notEmpty(),
        "birth_date" => v::date('d/m/Y')->notEmpty()
    ]);
于 2020-10-01T16:12:47.497 回答