Валидируем даты
Недавно я узнал, что Zend_Date может использоваться в двух модах iso и php, причём iso используется по умолчанию.
При использовании валидатора Zend_Validate_Date в формах, мне больше нравится использовать php формат, к которому я привык за долгое время разработки web приложений.
Вот код, который создаёт элемент:
$subForm->addElement('text', 'start_date', array( 'filters' => array('StringTrim', 'StripTags'), 'required' => true, 'label' => 'Start date', 'validators' => array( array('Date', true, array('format'=>'j F Y')), ), ));
Как вы уже заметили, я хочу чтобы дата была в формате "8 November 2010".
Этого добиться довольно таки просто, добавив код в Bootstrap.php:
function _initDateFormat() { Zend_Date::setOptions(array('format_type' => 'php')); }
Обратите внимание на то, что это статический вызов, так что он распространяется на все инстанции Zend_Date.
Так же я обнаружил, что при использовании формата php многие выражения Zend_Date, такие как Zend_Date::MONTH не работают.
У нас есть несколько дорог, по которым мы можем пойти.
Менять формат отображения там, где это необходимо. Примерно так:
$currentOptions = Zend_Date::setOptions(); $currentFormatType = $currentOptions['format_type']; Zend_Date::setOptions(array('format_type' => 'iso')); // Теперь вы можете использовать Zend_Date::MONTH, ZEND_DATE::ISO и т.д. // После этого вренуть всё как было Zend_Date::setOptions(array('format_type' => $currentFormatType)); Так же мы можем перезаписать Zend_Validate_Date: class App_Validate_Date extends Zend_Validate_Date { public function isValid ($value) { $currentOptions = Zend_Date::setOptions(); $currentFormatType = $currentOptions['format_type']; Zend_Date::setOptions(array('format_type' => 'php')); $valid = parent::isValid($value); Zend_Date::setOptions(array('format_type' => $currentFormatType)); } }
Так же у меня имеется несколько требований к валидации:
- Определение пустого $value;
- Формат Y-m-d так же должен проходить валидацию.
class App_Validate_Date extends Zend_Validate_Date { public function isValid ($value) { $this->_setValue($value); if (empty($value)) { return true; } $valid = $this->_testDateAgainstFormat($value, $this->getFormat()); if (!$valid) { // проверяем на формат $valid = $this->_testDateAgainstFormat($value, 'Y-m-d'); } if ($valid) { return true; } $this->_error(self::INVALID_DATE); return false; } protected function _testDateAgainstFormat($value, $format) { $ts = strtotime($value); if ($ts !== false) { $testValue = date($format, $ts); if ($testValue == $value) { return true; } } return false; } }
Этот код не будет работать если вы будете иметь дело с локализованными датами! Но вы всегда можете подстроить его под себя!
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/1YB45nRMHlE/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
- 2024-01-25 » Переменные Gitlab-Ci
- 2024-01-25 » Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами
- 2024-01-25 » Копирование файлов scp
- 2024-01-21 » Бездепозитные бонусы от казино: обзор условий и правил использования
- 2024-01-18 » Современная обработка ошибок в PHP
- 2024-01-18 » Пример шаблона проектирования MVC в PHP
- 2024-01-18 » Мифический человеко-DevOps
- 2023-12-28 » Google подвел итоги 2023 года в поиске
- 2023-12-28 » 5 ошибок отдела продаж, из-за которых вы теряете клиентов
- 2023-12-28 » Американский суд признал монополию Google на рынках дистрибуции Android-приложений
- 2023-12-28 » Хостинг-провайдер GoDaddy перестанет оказывать услуги пользователям из России
"Если технология меняется почти каждый день, нет смысла нанимать человека потому, что он обладает специфическим набором профессиональных навыков - все равно эти навыки скоро устареют. Вам нужно стараться принимать на работу людей, которые обладают широкими универсальными способностями к решению проблем, каким бы трудным это ни оказалось." |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.