gpt4 book ai didi

coldfusion - application.cfc 不会触发任何默认的 cffunction?冷聚变

转载 作者:行者123 更新时间:2023-12-04 01:37:35 24 4
gpt4 key购买 nike

谁能告诉我是什么问题?我尝试运行一些 .cfm 文件,但除了 cfcomponent 之外,它不会触发 cffunction 的任何影响?我错过了什么吗?谁能给我解释一下?

<cfcomponent>
<cfset THIS.Name = "formdemo">
<cfset THIS.SessionManagement = true>
<cfset This.Sessiontimeout="#createtimespan(0,0,20,0)#">
<cfset This.applicationtimeout="#createtimespan(5,0,0,0)#">
--Entered cfcomponent--
<cffunction name="onApplicationStart" returnType="boolean" output="false">
--Entered Application Start--
<cfset application.portfolioUploadRoot = "ram:///portfoliouploads">
<cfif not directoryExists(application.portfolioUploadRoot)>
<cfdirectory action="create" directory="#application.portfolioUploadRoot#">
</cfif>
<cfreturn true>
</cffunction>
<cffunction name="onSessionStart" returnType="void" output="false">
--Entered Session Start--
<cfset session.myuploadroot = application.portfolioUploadRoot & "/" & replace(createUUID(), "-", "_", "all")>
<cfif not directoryExists(session.myuploadroot)>
<cfdirectory action="create" directory="#session.myuploadroot#">
</cfif>
</cffunction>
<cffunction name="onApplicationEnd" returnType="void" output="false">
--Entered Application End--
<cfargument name="applicationScope" required="true">
<cfif directoryExists(arguments.applicationScope.portfolioUploadRoot)>
<cfdirectory action="delete" recurse="true" directory="#arguments.applicationScope.portfolioUploadRoot#">
</cfif>
</cffunction>
<cffunction name="onSessionEnd" returnType="void" output="false">
--Entered Session End--
<cfargument name="sessionScope" type="struct" required="true">
<cfargument name="appScope" type="struct" required="false">
<cfif directoryExists(arguments.sessionScope.myuploadroot)>
<cfdirectory action="delete" recurse="true" directory="#arguments.sessionScope.myuploadroot#">
</cfif>
</cffunction>
</cfcomponent>

结果只在cfmpage.cfm的开头显示“--Entered cfcomponent--”。

cfmpage.cfm:
<cfparam name="form.textname" default="">
<cfparam name="form.textemail" default="">
<cfparam name="form.docattach" default="">
<cfif structKeyExists(form, "Submit")>
<cfset form.textname = trim(htmlEditFormat(form.textname))>
<cfset form.textemail = trim(htmlEditFormat(form.textemail))>
<cflocation url="formcomplete.cfm" addToken="false">
</cfif>
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
<form method="post" enctype="multipart/form-data">
<cfoutput>
<input id="textname" name="textname" type="text" class="input-large" required="" value="#form.textname#">
<input id="textemail" name="textemail" type="text" class="input-large" required="" value="#form.textemail#">
</cfoutput>
</form>
</body>
</html>

最佳答案

它正在做它应该做的。

onApplicationStart -- Runs when ColdFusion receives the first request for a page in the application.
For this, to easily see this, you can try changing the name of the application, then
visit a page within.

onSessionStart -- Only run upon the first visit within the session. If you wait til after the
timeout and then come back, you'll see this. Changing the application name will should also
retrigger this.

onSessionEnd -- Run when the session ends. It will trigger after the timeout, it's used so that
you can clean up activity. For instance, if you're using something like Application.NumberOnline.
OnSessionEnd can substract one (where onSessionStart) can add one.

onApplicationEnd -- Runs when the application timeout occurs or the server is shutting down.

后两者都不会在屏幕上显示任何文本,因为您在访问页面时看不到该事件。但是,您可以手动调用它们以触发它们的效果。但是,您可以根据自己的选择记录这些操作。例如,您可以以这种方式使用 cflog:
<cffunction name="onApplicationEnd">
<cfargument name="ApplicationScope" required=true/>
<cflog file="#This.Name#" type="Information"
text="Application #Arguments.ApplicationScope.applicationname# Ended" >
</cffunction>

换句话说:
<cfscript>
ap = createObject("component","Application");
ap.onSessionEnd(session,application);
</cfscript>

将显示文本,因为它正在触发事件。

最后,如果您希望在每个页面上发生一些事情,onRequestStart 和 onRequestEnd 或 onRequest 是不错的选择。 OnRequest 是一种环绕页面的方法,因此您可以在同一个请求中执行页眉和页脚操作,但您必须明确包含该文件,而 onRequestStart/onRequestEnd 在请求的开始和结束时执行。

调用的操作方法的顺序是
  • onApplicationStart(在第一个应用程序事件上运行)
  • onSessionStart(在第一个 session 事件上运行)
  • onRequestStart
  • 询价
  • onRequestEnd

  • 最后,除非调用函数,否则函数不会触发。这也适用于您自己编写的函数。
    <cfscript>
    function foo() {
    writeoutput("bar");
    }
    </cfscript>

    在你真正尝试类似 <cfoutput>#foo()#</cfoutput> 之前不会做任何事情.

    在“默认函数”的情况下,这些只是 CF 在某些点调用的特殊函数/方法(如果它们存在)。

    关于coldfusion - application.cfc 不会触发任何默认的 cffunction?冷聚变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27540358/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com