Удивительным Respect Validation library поставляется со множеством встроенных валидаторов, таких как string (), alpha () и так далее. Я хочу добавить самоопределенные валидаторы в библиотеку, например, я хочу быть в состоянии сделать это:
Validator::myCustomValidator()->assert( $input );
Я только что обнаружил, что это не очень сложно, но мне пришлось посмотреть на исходный код библиотеки, чтобы выяснить это, поэтому я публикую этот вопрос с самоотдачей здесь для дальнейшего использования.
Определите класс валидации и сопутствующий класс исключений в правильном пространстве имен, и библиотека валидации будет автоматически использовать их для проверки ваших данных, как таковая:
myCustomValidator.php:
<?php
namespace Respect\Validation\Rules;
class myCustomValidator extends AbstractRule
{
public function validate($input)
{
return true; // Implement actual check here; eg: return is_string($input);
}
}
myCustomValidatorException.php:
<?php
namespace Respect\Validation\Exceptions;
class myCustomValidatorException extends ValidationException
{
public static $defaultTemplates = array(
self::MODE_DEFAULT => array(
self::STANDARD => '{{name}} must ... ', // eg: must be string
),
self::MODE_NEGATIVE => array(
self::STANDARD => '{{name}} must not ... ', // eg: must not be string
)
);
}
Пока эти файлы включены в ваш проект, Validator::myCustomValidator()->assert( $input );
теперь должен работать.
Это, очевидно, основывается на соглашениях об именах, поэтому обязательно используйте имя класса для вызова самоопределяемого валидатора, и вы должны быть установлены.
Других решений пока нет …