domtomproject / easy-rest-bundle
Symfony 扩展包,用于快速实现 REST 动作
v1.0.3
2017-03-16 07:34 UTC
Requires
- php: ^7.0
- jms/serializer-bundle: ^1.1
- respect/validation: ^1.1
- symfony/symfony: 3.2.*
Requires (Dev)
- sensio/generator-bundle: ^3.0
- symfony/phpunit-bridge: ^3.0
This package is not auto-updated.
Last update: 2024-09-23 16:30:36 UTC
README
这是一个快速且简洁的数据验证和设置数据的扩展包。该扩展包使用了 Respect/Validation 库,其中包含所有的验证规则。
基本用法
安装
composer require domtomproject/easy-rest-bundle "dev-master"
或者在 composer.json 中
"domtomproject/easy-rest-bundle": "dev-master"
并且
composer update
在 AppKernel.php 中
$bundles = [
...
new DomTomProject\EasyRestBundle\DomtomEasyRestBundle(),
...
]
在 config.yml 中
domtom_easy_rest: ~
首先,您需要创建规则文件。默认的验证文件路径是 app/Resources/validation。在这个例子中,我们创建了一个 User.yml 文件。
default: # its a key
name:
- notEmpty
- stringType
age:
- notEmpty
- intType
sex:
- notEmpty
- in: [[male, female]]
language_with_skill:
- keySet:
- $key:
- pl
- $in: [[intermediate, basic, none, national ]]
- $key:
- en
- $in: [[intermediate, basic, none, national ]]
注意 $ 符号。如果 -keySet 参数是一个函数,您必须使用 $ 符号,否则您需要传递一个包含键 'key' 的关联数组。起始函数没有 $ 符号。这个 yaml 文件等同于
/* static version */
use Respect\Validation\Validator as v; return array (
'default' =>
array (
'name' => v::notEmpty()->stringType(),
'age' => v::notEmpty()->intType(),
'sex' => v::notEmpty()->in(["male", "female"]),
'language_with_skill' => v::keySet(v::key("pl", v::in(["intermediate", "basic", "none", "national"])), v::key("en", v::in(["intermediate", "basic", "none", "national"]))),
),
);
/* 'new' version, used for caching (because it's little bit faster) */
use Respect\Validation\Rules; return array (
'default' =>
array (
'name' => new Rules\AllOf(new Rules\NotEmpty(), new Rules\StringType()),
'age' => new Rules\AllOf(new Rules\NotEmpty(), new Rules\IntType()),
'sex' => new Rules\AllOf(new Rules\NotEmpty(), new Rules\In(["male", "female"])),
'language_with_skill' => new Rules\AllOf(new Rules\KeySet(new Rules\Key("pl", new Rules\In(["intermediate", "basic", "none", "national"])), new Rules\Key("en", new Rules\In(["intermediate", "basic", "none", "national"])))),
),
);
这个文件是由 yml 生成的缓存。
现在您可以使用这些规则了。
use AppBundle\Entity\User;
...
$validator = $this->get('domtom_easy_rest.validation');
$rules = $this->get('domtom_easy_rest.rules')->getDefault(User::class);
/* can be string like 'User', getDefault(User::class) equals get(User::class, 'default'),
where 'default' is a key in yml
*/
if(!$validator->validate($data, $rules)){
return new JsonResponse($validator->getErrors());
}
$validData = $validator->getValidData();
// now if you use FillableEntityTrait in your entity you can pass this valid data to setFromData method
$user->setFromData($validData);
为了测试,我们发送一个 JSON 请求。
{
"name": "John",
"sex": "male",
"language_with_skill": {
"pl": "intermediate",
"en": "national"
},
"age": 30
}
在这个例子中,一切都会正常工作。
可配置的数据是
domtom_easy_rest:
rules_directory: %kernel.root_dir%/Resources/Validation # if you want change validation files directory
rules_parser_service: domtom_easy_rest.yaml_rules_parser # if you want change parser, thats service name. Builded are
# yaml_rules_parser and php_rules_parser
cacher_service: domtom_easy_rest.cacher # like in rules_parser_service
serializer_service: jms_serializer # bundle uses jms_serializer ,but you can use serializer you want
有关规则自定义,请参阅 Respect/Validation