Есть ли способ глобально применить атрибут top к cfdump/writeDump при работе с объектами ORM?
При работе с вложенными отношениями ORM использование cfdump или writeDump может быстро привести к java.lang.OutOfMemoryError
ошибки, потому что CF пытается разрешить отношения во вложенных объектах и сбросить слишком много объектов.
Этого можно избежать с помощью top
атрибут, например: <cfdump var=#SomeObject# top=3 />
Трудно помнить, чтобы писать это все время - есть ли способ настроить CF, чтобы не опускаться слишком много уровней при работе с объектами ORM?
1 ответ
Там нет никаких настроек администратора для этого. ( поднятый вопрос)
Несовершенное решение - создать оболочку для тега cfdump путем переименования. {cfusion}/wwwroot/WEB-INF/cftags/dump.cfm
к (например) origdump.cfm
затем создание нового dump.cfm
файл, содержащий:
<cfif isObject(attributes.var) AND NOT StructKeyExists(attributes,'top')>
<cfset attributes.top = 3 />
</cfif>
<cforigdump attributecollection=#attributes# />
<cfexit method="exitTag" />
К счастью, функция writeDump будет вызывать эту оболочку (поэтому она работает как для тега, так и для функции).
К сожалению, обертка не вызывается рекурсивно - если объект ORM находится в структуре или массиве, тогда исходная проблема все еще проявляется - может быть возможно предварительно просмотреть сложные переменные, чтобы определить, есть ли внутри взаимосвязи, и установить соответствующее верхнее значение, но только ограниченное решение может быть достигнуто с этим (то есть это затронуло бы соседние структуры / массивы).