domtomproject/easy-rest-bundle

Symfony 扩展包,用于快速实现 REST 动作

安装: 120

依赖: 1

建议者: 0

安全: 0

星级: 2

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0.3 2017-03-16 07:34 UTC

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