Проблема Coldfusion о методе onRequest в Application.cfc - PullRequest
1 голос
/ 09 июля 2009

Я был заблокирован проблемой холодного синтеза, любые предложения приветствуются. Теперь позвольте мне описать мою проблему.


У меня есть Application.cfc в корне моего сайта, содержание в нем выглядит следующим образом:

<cfcomponent output="false">
    <cffunction name="onRequest" returnType="void">
        <cfargument name="thePage" type="string" required="true">
        <cfinclude template="#arguments.thePage#">
    </cffunction>
</cfcomponent>

, а также у меня есть шаблон cfm, имя которого test.cfm, его содержимое указано следующим образом:

<cfdump var="#variables.this#"><br /><br /><br /><br /><br /><br />
<cfdump var="#this#">

Теперь, если вы запрашиваете test.cfm, все в порядке, но когда я удаляю метод onRequest в Application.cfc и снова запрашиваю test.cfm, он жалуется на "Element THIS is undefined in VARIABLES. ", я не знаю почему Кто-нибудь может это объяснить? большое спасибо.

пс:

Вы можете добавить столько функций в Application.cfc, как onSessionStart, onSessionEnd, onApplicationStart, onApplicationEnd ..., но если нет метода onRequest, вы запрашиваете test.cfm и получаете ошибку. я просто не знаю почему.

Ответы [ 2 ]

7 голосов
/ 09 июля 2009

Это потому, что область действия this относится к экземпляру cfc. Когда вы включаете test.cfm из application.cfc , это ссылается на экземпляр application.cfc. Когда вы вызываете test.cfm напрямую , это не существует, поскольку запрос не прошел application.cfc, поэтому вы не находитесь внутри экземпляра cfc.

Не уверен, что вы пытались сделать, но вы, вероятно, не хотите использовать это вне cfc. Если вы хотите сбросить область приложения из test.cfm, просто сделайте это вместо:

<cfdump var="#application#"/>
3 голосов
/ 09 июля 2009

Возвращение true из метода onRequestStart загрузит страницу для вас. Как сказал dwb, ваше «this» относится к Application.cfc, потому что вы включили его в один из методов. Если вам нужно обратиться к Приложению, используйте область приложения, а не «this», если вы действительно не находитесь внутри Application.cfc.

...