catlabinteractive / neuron-model-validator
一个PHP输入模型,可以处理Swagger V1规范。
3.0.0
2022-02-06 13:36 UTC
README
一个可以处理Swagger V1规范的PHP输入验证器。
示例用法
$validator = \CatLab\Validator\Validator::fromSwagger('specs/'); $input = array ('id' => 1, 'name' => 'Example'); if ($validator->validate('ModelId', $input)) { echo 'Success!'; } else { echo 'Failure' . "\n"; foreach ($validator->getErrors() as $v) { echo $v . "\n"; } }
没有Swagger
常规模型
$specs = array ( 'message' => 'required|string', 'user' => array ( 'id' => 'numeric|required', 'company' => array ( 'id' => 'numeric|required', 'name' => 'string|required' ) ) ); $data = array ( 'message' => 'This is a message', 'user' => array ( 'id' => 1, 'company' => array ( 'id' => 1, 'name' => 'This is a company name' ) ) ); $validator = new Validator(); $validator->addModel(Model::make('test', $specs)); $valid = $validator->validate('test', $data);
可选属性:在属性名后添加问号以将属性标记为可选。
$specs = array ( 'message' => 'required|string', 'user' => array ( 'id' => 'numeric|required', 'company?' => array ( 'id' => 'numeric|required', 'name' => 'string|required' ) ) ); $data = array ( 'message' => 'This is a message', 'user' => array ( 'id' => 1 ) ); $validator = new Validator(); $validator->addModel(Model::make('test', $specs)); $correct = $validator->validate('test', $data);
高级示例
数组
$validator = new Validator(); $model = Model::make( 'ArrayModel', array ( 'id' => 'required|int', 'collection' => array ( 'count' => 'int|required', 'items[]' => 'int' ) ) ); $data = array ( 'id' => 1, 'collection' => array ( 'count' => 2, 'items' => array (1, 2, 3) ) ); $correct = $validator->validate('ArrayModel', $data); $validator->addModel($model);
模型数组
$validator = new Validator(); $model = Model::make( 'ArrayModel', array ( 'id' => 'required|int', 'collection' => array ( 'count' => 'int|required', 'items[]?' => array ( 'id' => 'int|required', 'name' => 'string' ) ) ) ); $validator->addModel($model); $data = array ( 'id' => 1, 'collection' => array ( 'count' => 2, 'items' => array ( array ( 'id' => 15, 'name' => 'Foo' ), array ( 'id' => 16, 'name' => 'Bar' ) ) ) ); $correct = $validator->validate('ArrayModel', $data);
在属性名末尾添加问号以将数组属性标记为可选。
$validator = new Validator(); $model = Model::make( 'ArrayModel', array ( 'id' => 'required|int', 'collection' => array ( 'count' => 'int|required', 'items[]?' => array ( 'id' => 'int|required', 'name' => 'string' ) ) ) ); $validator->addModel($model); $correctData = array ( 'id' => 1, 'collection' => array ( 'count' => 2, 'items' => array ( array ( 'id' => 15, 'name' => 'Foo' ), array ( 'id' => 16, 'name' => 'Bar' ) ) ) ); $correct = $validator->validate('ArrayModel', $correctData);
与PHPUnit一起使用
$model = Model::make( 'ModelWithValues', array ( 'id' => 'required|string', 'name' => 'required|string', 'value1' => 'required|string' ) ); $data = array ( 'id' => 'I am a string', 'name' => 'My name is Paul', 'value1' => 'I\'m very happy here' ); $this->assertThat($data, new IsValidModel($model));
检查精确值(转换为可比较类型)
$validator = new Validator(); $model = Model::make( 'ModelWithValues', array ( 'id' => 'required|string', 'name' => 'required|string', 'value1' => 'required|string' ) ); $validator->addModel($model); // Set the expected values $model->setValues(array ( 'id' => 15, 'name' => 'Thijs', 'value1' => 'woop' )); // Input data $data = array ( 'id' => 15, 'name' => 'Thijs', 'value1' => 'woop' ); // Check if model match expectations & compare values $correct = $validator->validate ('ModelWithValues', $data);