允许主题级别'EventHandler.cfc'在MURA CMS 6中引发异常?

时间:2018-03-16 09:47:28

标签: coldfusion mura

任何人都可以告诉我,如何在MURA CMS 6中的主题级别EventHandler.cfc中启用异常处理?

我已经不得不在Application.cfc错误方法中删除错误处理,因为默认例程没有显示足够的错误详细信息。但是,似乎整个CFC框架都包含在<CFTRY>块中,坦率地说这很奇怪。

我更喜欢不使用<CFCATCH>将错误转储到文件的解决方案,这是我目前使用的临时解决方案。

我只是希望Adobe ColdFusion能够像我的非MURA网站一样行事。当CFC出现错误时,它只显示它,简单&amp;简单。

当然,对于生产,我的方法是不同的。

更新:

只是为了让您知道,我正在使用Adobe ColdFusion 11,并且启用了强大的错误处理功能,所以我知道这个问题与Adobe ColdFusion无关。这绝对是MURA CMS的问题。

1 个答案:

答案 0 :(得分:2)

不要删除内置错误处理。他们已经采取措施保护您免受信息泄露。而是根据您的需要更改错误处理。

Mura基本上有三个级别的错误“捕捉”。在主题级别,在站点级别,然后在全局。 (而且我发现即使错误可能会在较低级别捕获,例如'site',但不会阻止同样的错误冒泡并且还会触发'全局'处理程序。)

Steve Withington创建了一个Gist示例,可以帮助您入门。 See it here。请务必阅读代码中的注释,因为它解释了文件所在的位置以及调用它们所需的任何配置设置。

在此处复制他的代码示例以防将来资源被删除。
信用Steve Withington

  

Mura错误处理:您可以使用任何或甚至两种附加方法来帮助Mura CMS中的错误处理。这比默认设置更好“我们很抱歉,发生了错误。请稍后再试。”

<强> muraCustomErrorFile.cfm

<!---
    1) Drop this file under /config/ directory.
    2) Add errortemplate=/muraWRM/config/customErrorFile.cfm to the settings.ini.cfm file.
    3) Set debuggingenabled=false in the settings.ini.cfm file.
    4) Reload Mura CMS
--->
<cftry>
    <cfset msg = 'MURA ERROR - MESSAGE: #arguments.exception.Message#  DETAIL: #arguments.exception.Detail# ' />
    <cflog type="ERROR" file="MuraError" text="#msg#" />
    <cfcatch></cfcatch>
</cftry>
<cfparam name="url.debug" default="false" />
<cfoutput>
<!DOCTYPE html>
<html>
    <head>
        <title>Site Down For Maintenance</title>
    </head>
    <body>

        <h3>Site Down for Maintenance</h3>

        <cfif url.debug>
            <cfdump var="#arguments#" />

            <!--- You Have Access to arguments.eventName and aguments.exception --->
            <!---
            <h4>Exception Message</h4>
            <p>#arguments.exception.message#</p>

            <h4>Exception Detail</h4>
            <p>#arguments.exception.detail#</p>

            <h4>TagContext[1]</h4>
            <cfdump var="#arguments.exception.TagContext[1]#" />
            --->

            <!--- you could also dump whatever else you want to inspect --->
            <!---
            <cfdump var="#cgi#" label="CGI" />
            <cfdump var="#request#" label="REQUEST" />
            <cfdump var="#session#" label="SESSION" />
            <cfdump var="#application#" label="APPLICATION" />
            --->

        <cfelse>

            <p>This site is temporarily down for maintenance.</p>

        </cfif>

    </body>
</html>
</cfoutput>

<强> muraOnGlobalError.cfm

<cfscript>
// drop this method in either the Site or Theme eventHandler.cfc

public any function onGlobalError($) {
    var tagContext = '';
    var local = {};

    param name='url.debug' default=false;

    local.ex = arguments.$.event('exception');

    local.errorMessage = 'GLOBAL ERROR - MESSAGE: #local.ex.Message#  DETAIL: #local.ex.Detail# ';

    try {
        tagContext = local.ex.TagContext[1];
    } catch(any e) {};

    if ( IsStruct(tagContext) ) {
        local.errorMessage = local.errorMessage & '  
            LINE: #tagContext.LINE#  
            TEMPLATE: #tagContext.TEMPLATE#  
            RAW_TRACE: #tagContext.RAW_TRACE#';
    }

    WriteLog(type='ERROR', file='muraGlobalError', text='#local.errorMessage#');

    if ( url.debug ) {
        WriteOutput('<h2>Debug Output</h2>' & local.errorMessage);
        WriteDump(var=arguments, label='ARGUMENTS', abort=1);
    }
}
</cfscript>