Coldfusion "- Routinen können nicht deklariert werden, mehr als einmal"

Haben wir den folgenden code in unsere Applikation.cfc:

<cffunction name="onError" returnType="void" output="false">
    <cfargument name="exception" required="true">
    <cfargument name="eventname" type="string" required="true">
    <cfset cfcatch = exception>
    <cfinclude template="standalone/errors/error.cfm">
</cffunction>

Innerhalb der Fehler.cfm Seite haben wir für Sie diesen code (ich habe es nicht geschrieben):

<cfscript>
        function GetCurrentURL() {
            var theURL = "http";
            if (cgi.https EQ "on" ) theURL = "#TheURL#s";
            theURL = theURL & "://#cgi.server_name#";
            if(cgi.server_port neq 80) theURL = theURL & ":#cgi.server_port#";
            theURL = theURL & "#cgi.path_info#";
            if(len(cgi.query_string)) theURL = theURL & "?#cgi.query_string#";
            return theURL;  
        }
</cfscript>

All dies ist Teil eines Skripts, das schnürt die Bündel von Informationen über den Fehler und die Datensätze in der Datenbank.

Wenn ein Fehler Auftritt, erhalten wir die Meldung "Die routine GetCurrentURL erklärt wurde zweimal in verschiedenen Vorlagen". Allerdings habe ich durchsucht die gesamte Codebasis in verschiedene Arten und fand "GetCurrentURL" verwendet nur zweimal, beide Male in error.cfm. Die erste Zeit ist, die Erklärung und die zweite ist die tatsächliche Nutzung. Also ich bin mir nicht sicher, warum die CF sagt "in verschiedenen Vorlagen".

Mein Nächster Gedanke war, dass das problem ist ein rekursiver Aufruf, und dass Fehler.cfm ist erroring und sich selbst aufrufenden, also habe ich versucht diese beiden änderungen, die Sie haben sollten, ist das Problem behoben und entlarvt den wirklichen Fehler:

<cfif StructKeyExists(variables,"GetCurrentURL") IS "NO">
    <cfscript>
            function GetCurrentURL() {
                var theURL = "http";
                if (cgi.https EQ "on" ) theURL = "#TheURL#s";
                theURL = theURL & "://#cgi.server_name#";
                if(cgi.server_port neq 80) theURL = theURL & ":#cgi.server_port#";
                theURL = theURL & "#cgi.path_info#";
                if(len(cgi.query_string)) theURL = theURL & "?#cgi.query_string#";
                return theURL;  
            }
    </cfscript>
</cfif>

Und:

<cfscript>
    if (!StructKeyExists(variables,"GetCurrentURL")) {
            function GetCurrentURL() {
                var theURL = "http";
                if (cgi.https EQ "on" ) theURL = "#TheURL#s";
                theURL = theURL & "://#cgi.server_name#";
                if(cgi.server_port neq 80) theURL = theURL & ":#cgi.server_port#";
                theURL = theURL & "#cgi.path_info#";
                if(len(cgi.query_string)) theURL = theURL & "?#cgi.query_string#";
                return theURL;  
            }
    }
</cfscript>

Weder gearbeitet. Ich habe auch versucht, indem diese auf der Seite vor dem Aufruf der Funktion:

<cfoutput>"#StructKeyExists(variables,"GetCurrentURL")#"</cfoutput>

Es verursacht das Wort "JA" gedruckt auf dem Bildschirm. Dies zeigt, dass die oben genannte Arbeit, wie deutlich der Inhalt der if-Anweisung wird ausgewertet "JA", und so ist die if-Anweisung zu false ausgewertet, und somit ist die Funktion nicht deklariert werden, und so werde ich behalten, meine geistige Gesundheit. Aber aus irgendeinem Grund das problem weiterhin besteht.

Irgendwelche Gedanken auf, was möglicherweise eintretenden oder wie zu beheben nächsten? Ich klebte an diesem Punkt.

  • Sind Sie sicher, dass Fehler.cfm ist nicht im Lieferumfang enthalten anderswo? Ist es nur im onError()?
  • Ja, es war nur eine onError().
InformationsquelleAutor Nicholas | 2012-04-02
Schreibe einen Kommentar