Новые инструменты. 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 {
	// Есть ошибки при валидации
}

Strange Little Birds

Это один из тех альбомов (и музыка, собственно), которая по началу никак не зацепляет или даже не нравится, но через какое-то время начинаешь слушать снова и снова. Весь альбом Strange Little Birds потрясающий. А пока пара треков для превью.

Формы 3. Знакомство с Backbone

Не так давно я начал писать на Backbone. И, переделав кривущее приложение с нуля по наставлению коллеги (спасибо Егору), мне понравилась эта библиотека. Это то, чего мне не хватало в JavaScript. Системность и структурность, наконец-то.

Что-то похожее есть в чат-клиенте Candy, с которым я как-то работал ранее и пытался помочь разработчикам сделать новый дизайн. Пока дело дальше пары набросков не двинулось. Надеюсь, как-нибудь выкрою время.

Так вот, формы. Небольшой поиск показал, что есть Backbone Forms. Хорошая штука, которой не хватает в WP Forms. Если авторы ничего не накрутили и можно строить вьюшки по уже существующим в DOM элементам, то это потрясающая находка.

Visa Sponsor. Offers Relocation

Часто случается, что натыкаешься на пачку вакансий и глаза просто разбегаются! Все они пестрят потрясающими сносками: «Visa Sponsor», «Offers Relocation»… И сразу хочется работать везде, познакомиться со всеми — одновременно.

Как жаль, что я не робот и быть в 20 местах одновременно нельзя.

Кэширование языковых файлов в WordPress

Недавно заметил, что WordPress довольно часто тратит много времени на загрузку MO-файлов (файлы переводов). После некоторых поисков нашлось даже готовое решение WordPress MO Cache.

Плагин модифицирует логику загрузки MO-файлов и засовывает их содержимое в объектный кэш. Ну, а дальше понеслось.

Несмотря на наличие wordpress.org версии, плагин лучше подключать как MU Plugin. Иначе все языковые файлы, подключаемые до загрузки этого самого плагина, будут все равно загружаться как и раньше — каждый раз с диска (об этом написано и в FAQ плагина).

Из минусов, стоит отметить, несмотря на все это, вызывается функция is_readable(), что, я подозреваю, все равно делает обращение к файловой системе. Ну, и наличие composer.json в репозитории плагина бы не помешало.

Как поддержка хостинга может добавить уязвимостей вашему сайту

Недавно мне прислали вопрос в духе «форма отправки сообщений с сайта перестала работать, что делать?». Я ответил, что необходимо проверить настройки подключения к SMTP-серверу и попробовать отправить тестовое письмо — после приема сообщения, сайт отправляет его на почтовый ящик через SMTP сервер.

Continue reading

Формы для WordPress. Часть 2

Исходники плагина, о котором я писал ранее, оказались не такими уж и хорошими. На мой взгляд, код слишком запутан и лишен какой-то целостности — просто набросано туда-сюда. В плане архитектурной прозрачности WP Forms кажется значительно лучше.

Continue reading

Формы для WordPress

Наткнулся на интересный плагин wordpress.org/plugins/cmb2. Программное создание формочек и всяких дополнительный полей для плагинов и тем. Вроде без shitty-кода внутри, но внутреннюю архитектуру с одного взгляда «прочитать» не удалось.

Помнится, я даже сам форк делал заброшенного плагина для похожих целей. Там все было достаточно симпатично, но без поддержки AJAX и какой-то JS-инициализации полей (инпутов). Посмотрим, имеет ли смысл все это внедрять.