Я хотел написать про кучу нового и интересного с чем удалось познакомиться и какие мысли пришли в голову — но это много. Поэтому разобьем все на несколько постов. Первый (этот) пост посвящен короткому, но знакомству, с 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 { // Есть ошибки при валидации }