Maslosoft Mangan API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
<?php
/**
* This software package is licensed under AGPL or Commercial license.
*
* @package maslosoft/mangan
* @licence AGPL or Commercial
* @copyright Copyright (c) Piotr Masełkowski <pmaselkowski@gmail.com>
* @copyright Copyright (c) Maslosoft
* @copyright Copyright (c) Others as mentioned in code
* @link https://maslosoft.com/mangan/
*/
namespace Maslosoft\Mangan\Helpers\Validator;
use InvalidArgumentException;
use Maslosoft\Addendum\Interfaces\AnnotatedInterface;
use Maslosoft\Mangan\Interfaces\Validators\ValidatorInterface;
use Maslosoft\Mangan\Mangan;
use Maslosoft\Mangan\Meta\ValidatorMeta;
/**
* Factory of validators
*
* @author Piotr Maselkowski <pmaselkowski at gmail.com>
*/
class Factory
{
/**
* Create validator based on config.
* @param AnnotatedInterface $model
* @param ValidatorMeta $validatorMeta
* @return ValidatorInterface Validator instance
*/
public static function create(AnnotatedInterface $model, ValidatorMeta $validatorMeta, $fieldName = null)
{
$mn = Mangan::fromModel($model);
// Resolve validator class
if ($validatorMeta->proxy && empty($validatorMeta->class))
{
if (isset($mn->validators[$validatorMeta->proxy]))
{
$validatorMeta->class = $mn->validators[$validatorMeta->proxy];
}
else
{
if (empty($fieldName))
{
$fieldName = '<not provided>';
}
$args = [
get_class($model),
$validatorMeta->proxy,
$fieldName
];
$msg = vsprintf("Could not resolve validator class from proxy. For model `%s`. Proxy class: `%s`. Model field: `%s`", $args);
throw new InvalidArgumentException($msg);
}
}
if (empty($validatorMeta->class))
{
$args = [
get_class($model),
];
$msg = vsprintf("Empty validator class for model `%s`", $args);
throw new InvalidArgumentException($msg);
}
$config = (array) $validatorMeta;
unset($config['proxy']);
$di = $mn->getDi();
return $di->apply($config);
}
}
API documentation generated by ApiGen