Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Validator

Scrutinizer Code Quality Code Coverage

Installation

composer require xervice/validator

Using

To use the configurator you have to define validator-configuration plugins.

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));
               }
           ]
       ];
    }
}

The configuration is defined as an array. If one entry is a value "keyname" without key, you define this key as required. Also you can define the keyname as an array with the parameter "required" and "type" to define a specific value for the given key. For nested arrays you can direct address to a child value with level1.level2.level3 or you can define values for all elements like level1.level2.* => [ level3 => [ type => 'integer'] ]. For custom validations you can define a closure for one keyname. You get the value as an parameter in your closure.

Extending

You can write own Validator-Plugins and configure them in the validator dependency provider. Your plugin must implement the interface \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!');
        }
    }
}

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages