Новые инструменты. Symfony Validator

Я хотел написать про кучу нового и интересного с чем удалось познакомиться и какие мысли пришли в голову — но это много. Поэтому разобьем все на несколько постов. Первый (этот) пост посвящен короткому, но знакомству, с Symfony Validator.

На прошлой неделе я разобрался с работой Symfony Validator. Это потрясающая библиотека (дополнение) позволяет проверять любые типы данных на какие-либо соответствия. Если коротко, то проверка чего угодно сводится к паре дополнительных строчек. И не нужно городить очередную реализацию какой-нибудь формы в 101 раз.

Библиотека хороша тем, что работает где угодно, даже в WordPress — для этого ей ничего не нужно. Это большой плюс Symfony — весь фреймворк по сути набор небольших модулей (symfony.com/components), которые умеют работать независимо друг от друга (может скоро и Doctrine захочется прикрутить к WordPress? — пока не было необходимости). Я использую все это для проверки настроек большого плагина (энтерпрайз и все такое).

Ниже приведен простой пример использования Validator, но он полностью рабочий (должен быть, писал в блокнотике по памяти). Конечно, все это подойдет лишь для демонстрационного «стенда». Для нормального применения пришлось написать с десяток новых классов, «задокументировать» все это в интерфейсах и прочее. Но результат того явно стоил.

// Создаем валидатор
$validator = Validation::createValidator();

// Входные данные
$input_data = array(
	// Значение должно быть ссылкой
	'url' => 'http://korobochkin.com/',

	// Список чего-либо
	'post_types' => array( 'post', 'page' )
);
// Создаем правила для проверки массива
$constraints = new Constraints\Collection( array(
	'url' => array(
		// Не должно быть пустым
		new Constraints\NotBlank(),
		// Должно содержать ссылку
		new Constraints\Url()
	),
	'post_types' => new Constraints\Choice( array(
		// Доступные (разрешенные) варианты (опции)
		'choices' => array_values( get_post_types() ),
		// Может быть выбрано сразу несколько
		'multiple' => true,
		// Строгая проверка типов для брони :)
		'strict' => true
	) )
) );

// Проверяем
$errors = $validator->validate( $input_data, $constraints );

if( count( $errors ) === 0 ) {
	// Ошибок нет, переменная $input_data прошла проверку
}
else {
	// Есть ошибки при валидации
}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s