twig Как проверить, является ли объект экземпляром класса? (instanceOf)
Primary tabs
К сожалению, функции проверки на принадлежность к классу в twig нет.
На просторах интернета можно найти рекомендации по самостоятельному расширению возможностей шаблонизатора.
И несомненно данное решение более надёжное.
Но есть и более простой путь (для ленивых)). Сделать проверку is defined для поля/метода, присутствующего только в одном из классов:
// Допустим, у нас есть неоплаченое и оплаченое платёжное поручение, наследуемое от первого // Вместо того, чтобы делать проверку на класс, проверим, есть ли у нашего п/п поле Дата оплаты {%if paymentOrder.paidDate is defined%} <div>№ {{paymentOrder.number}}</div> <div>от {{paymentOrder.paidDate|date('d.m.Y')}}</div> {%else%} <div>Не оплачено</div> {%endif%}
Внимание!
Недостаток этого решения в его неочевидности (непонятно, зачем проверяется наличие поля/метода, если дальше нет его использования).
А также в опасности появления логических ошибок в случае, если Вы изменили/удалили поле/его название, и знать не знали, что на нём завязана какая-то проверка в шаблоне.
Будьте бдительны ;)
Источники
- Log in to post comments
- 5386 reads
vedro-compota
Fri, 01/11/2019 - 18:07
Permalink
Недостаток этого решения в
тогда уж надо добавлять поле типа "type" или вообще отдельно помечать объекты выше, до передачи во view.
_____________
матфак вгу и остальная классика =)
melisa
Sat, 01/12/2019 - 08:37
Permalink
да, конечно
1) да, конечно, можно решить вопрос на уровне php, здесь представлен лишь один из вариантов решения.
2) что касается поля type - да, это ещё один вариант решения. В моём же случае это лишнее: бизнес логикой предусмотрено, что объекты Неоплаченое п/п и Оплаченое п/п всегда отличаются полем дата оплаты.
Как говорится, ради него вся песня и писалась ;)
vedro-compota
Sat, 01/12/2019 - 17:21
Permalink
объекты Неоплаченое п/п и
это не отменяет неочевидности кода, для человека не знакомого с бизнес логикой, по такому коду понять её куда труднее. Поле типа можно делать динамическим/виртуальным - -то только для сортировки по view, без хранения в бд
_____________
матфак вгу и остальная классика =)