Intereting Posts
Установленное приложение Redirect uri несоответствие на реальном сайте, который работает на localhost Как разбить таблицы таблицы MySQL пополам для отображения на каждой стороне страницы Поиск php mongodb '$ или' regex Получить весь лист из сложного XML с атрибутами Проблемы с imagecreatefromstring со строкой, переданной из javascript Плагин WordPress – добавьте новую страницу VARCHAR (4) хранит больше символов, чем четыре Создайте альбом Picasa и загрузите на него изображения с помощью PHP и cURL PHP DOMDocument получает текст между двумя тегами SETS Отправляйте деньги на любую учетную запись PayPal и получайте уведомление об оплате Я не могу понять, как обновить мое последнее время входа в систему есть причина, по которой Magento не должен поддерживать удаление / понижение для модулей включить php-файл только при определенных разрешениях экрана Файл загрузки PHPExcel Ratchet PHP WAMP – React / ZeroMQ – Конкретная передача пользователей

Проверьте, является ли переменная датой с Twig

У меня есть массив переменных, которые я хочу отобразить в шаблоне Twig, и каждая переменная может быть либо строкой, либо датой.

Если переменная является датой, я хочу применить фильтр date следующим образом:

 {{ my_var|date('d/m/Y') }} 

И если это строка, я хочу, чтобы она отображалась обычным способом:

 {{ my_var }} 

Есть ли способ проверить, является ли переменная датой (т. Е. Экземпляром объекта PHP DateTime)?

Возможно, это не лучший способ сделать это, но я нашел решение моей проблемы.

 {% if my_var.timestamp is defined %} {{ my_var|date('m/d/Y') }} {% else %} {{ my_var }} {% endif %} 

Поскольку объект DateTime PHP имеет общедоступный метод getTimestamp , это способ проверить, является ли переменная датой, установлено это свойство или нет.

Решение Майкла работает в большинстве случаев, но есть некоторые особые случаи, которые следует учитывать, когда вы хотите иметь универсальное решение.

Во-первых, объект, который вы тестируете для использования getTimestamp() , не должен быть экземпляром DateTime . Я могу, во многих случаях, когда поле timestamp было бы полезно в объекте, поэтому вместо этого я getTimezone() бы метод getTimezone() .

Во-вторых, если my_var – объект, обладающий магическим методом __call , то все такие тесты __call положительными. Вот почему я предлагаю следующий отрицательный тест:

 {% if my_var.timezone is defined and my_var.nonExistingProperty is not defined %} {{ my_var|date('m/d/Y') }} {% else %} {{ my_var }} {% endif %} 

Второй случай был тот, с которым я недавно боролся из-за использования объектов ORM ORM. Базовый класс имеет метод __call который ловит все тесты Twig.