Есть ли способ глобально применить атрибут 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 находится в структуре или массиве, тогда исходная проблема все еще проявляется - может быть возможно предварительно просмотреть сложные переменные, чтобы определить, есть ли внутри взаимосвязи, и установить соответствующее верхнее значение, но только ограниченное решение может быть достигнуто с этим (то есть это затронуло бы соседние структуры / массивы).

Другие вопросы по тегам