Data Transformers - korobochkin/wp-kit GitHub Wiki
Data Transformers это специальные объекты, идея которых подчерпнута из работы Symfony Forms. Их использование позволит сэкономить кучу времени и сделать код более надежным и читаемым.
Когда вы работаете с данными в WordPress, то наверняка замечали, что после сохранения integer, boolean or floats values always converted to strings.
Более того, разные функции WordPress могут по разному сохранять значения или не сохранять их вовсе. Про эти особенности разработчики часто забывают.
Например, если вы сохраняли число 1
(integer) с помощью функции update_option()
, то после сохранения оно будет преобразовано в '1'
(string).
$counter = 1;
// $counter имеет тип integer
// Lets save our value which have integer type.
update_option('your_option_name', $counter);
// But if you retreive it back WordPress returns string
$counter = get_option('your_option_name');
// $counter имеет тип string
Кроме того при используя функции WordPress напрямую вы можете потерять свои данные, даже если вам кажется, что вы их успешно сохранили.
// Предположим, что мы хотим сохранить состояние какой-либо настройки,
// которая может принимать значения включено-выключено, что может быть представлено
// как true-false значения в PHP.
$result = update_option('your_option_name', false);
// Теперь переменная $result содержит значение true
// что означает успешное сохранение вашей настройки.
// На самом деле ваша настройка не сохранилась! И вы потеряли данные!
// $value = get_option('your_option_name');
// Переменная $value имеет значение false (boolean).
// Что это значит? Настройки нет в базе данных (в этом случае WordPress тоже отдает false)
// или значение настройки false?
// Но если бы вы изначально сохранили true, то при вызове get_option()
// получили бы '1' (string).
Все это приводит к неразберихе и непонимаю что происходит. Очень часто разработчики не обращают на это внимания и торопятся сделать свой плагин. Но когда на вашей странице появляется больше пары настроек, то начинается дикая неразбериха. Из-за этого ваш код может работать неправильно.
Вы уверены, что ваш код сможет правильно обработать все из этих сценариев и вариаций?
Объекты DataTransformers могут производить любые преобразования. Например, WP Kit уже содержит специальный класс, у которого установлен специальный трансформер, который превращает timestamp в \DateTime
instance. Это сокращает код и делает его приятнее.
use Korobochkin\WPKit\Options\Special\DateTimeOption;
$option = new DateTimeOption();
$dateTime = $option->get();
// $dateTime содержит объект \DateTime
Если вы хотите получить значение без использования Data Transformers, то можно воспользоваться методом getValueFromWordPress()
.
use Korobochkin\WPKit\Options\Special\DateTimeOption;
$option = new DateTimeOption();
$dateTime = $option->getValueFromWordPress();
// $dateTime содержит строчку с timestamp
Вы можете самостоятельно создавать DataTransformers для любых преобразований. Например, сохраненный в базе данных post ID может быть автоматически преобразован в \WP_Post
instance и не прийдется каждый раз дополнительно писать вызов get_post($option->get())
.