xervice/validator

2.1.0 2019-05-01 20:15 UTC

This package is auto-updated.

Last update: 2024-09-29 05:08:54 UTC


README

Scrutinizer Code Quality Code Coverage

安装

composer require xervice/validator

使用

要使用配置器,您必须定义validator-configuration插件。

use Xervice\Validator\Business\Dependency\ValidatorConfigurationProviderPluginInterface;
use Xervice\Validator\Business\Model\ValidatorType\IsType;

class TestValidatorConfig implements ValidatorConfigurationProviderPluginInterface
{
    /**
     * @return array
     */
    public function getValidatorConfiguration(): array
    {
        return [
           'unit',
           'floatTest',
           'child',
           [
               'unit' => [
                   'type' => IsType::TYPE_INTEGER
               ],
               'floatTest' => [
                   'type' => IsType::TYPE_FLOAT
               ]
           ],
           [
               'isTest' => [
                   'required' => true,
                   'type' => IsType::TYPE_BOOLEAN
               ]
           ],
           [
               'floatTest' => function ($value) {
                   return $value === 1.23;
               },
               'child' => [
                   'subchild1',
                   'subchild2' => [
                       'type' => IsType::TYPE_OBJECT
                   ],
                   'subchild3' => [
                       'type' => IsType::TYPE_BOOLEAN
                   ]
               ]
           ],
           [
               'child.*' => function ($value) {
                   return (is_string($value) || is_object($value));
               }
           ]
       ];
    }
}

配置定义为数组。如果一个条目是“keyname”的值,没有键,则您定义此键为必需的。您还可以将keyname定义为具有“required”和“type”参数的数组,以定义给定键的特定值。对于嵌套数组,您可以使用level1.level2.level3直接引用子值,或者您可以定义所有元素的价值,如level1.level2.* => [level3 => [type => 'integer']]。对于自定义验证,您可以定义一个闭包来处理一个键名。您将在闭包中作为参数获得值。

扩展

您可以在validator依赖提供者中编写自己的Validator-插件并配置它们。您的插件必须实现\Xervice\Validator\Business\Dependency\ValidatorTypePluginInterface接口。

class ExamplePlugin extends AbstractBusinessPlugin implements ValidatorTypePluginInterface
{
    protected const NAME = 'ExamplePlugin';

    /**
     * @return string
     */
    public function getTypeName(): string
    {
        return static::NAME;
    }

    /**
     * @param mixed $config
     *
     * @return bool
     */
    public function isResponsible($config): bool
    {
        return true;
    }

    /**
     * @param array $data
     * @param string $key
     * @param mixed $config
     */
    public function validate(array $data, string $key, $config): void
    {
        if (<is-not-valid>) {
            throw new ValidatorException('Foo is not valid because!');
        }
    }
}