2

そのテンプレートが存在しないときにユーザーが/somePage.cfmのURLにアクセスし、別のディレクトリのテンプレートを使用するシナリオを処理したいと思います。apacheなどで書き換えることでこれを実行できることはわかっていますが、ロジックをそこに格納したくないのでonTemplateMissing、Application.cfcの動作をオーバーライドしようとしました。

私のテストではうまく機能しているようですが、このハッキーなソリューションを実行することで、まだ見たことのない部分(たとえば、onSessionStartなどの現在使用していないメソッド)をショートカットしているのではないかと心配しています。将来的に問題が発生する可能性があります。

これが私が現在行っていることです:

<cffunction name="onMissingTemplate">
    <cfargument name="targetPage" />
    <!--- Handle any templates that we're really loading from elsewhere --->
    <cfif isFooTemplate(arguments.targetPage)>
        <cfset onRequestStart(arguments.targetPage) />
        <cfset onRequest(arguments.targetPage) />
        <cfset onRequestEnd(arguments.targetPage) />
        <cfreturn true />
    </cfif>
    <cfreturn false />
</cffunction>

私のメソッドでも、 trueを返すonRequestテンプレートをさらに処理していることに注意してください。isFooTemplate()

4

2 に答える 2

4

これはハッキーな解決策ではないと思います。これがメソッドの目的であり、false を返すと、ColdFusion は必要に応じてアドミニストレータで設定した標準エラー ハンドラを呼び出します。

onSessionStart() が実行されなかった唯一のケースは、ユーザーが最初のページ リクエストで onMissingTemplate() をヒットした場合です。何らかの理由でユーザーにセッションが必要な場合は、セッション スコープの存在を確認できます。これは、セッション スコープが onMissingTemplate() メソッドで使用可能であり、適切に処理されることが想定されているためです。

于 2009-06-16T20:00:34.200 に答える
2

実際にはonTemplateMissing ではなくonMissingTemplateです。これは推奨される方法であり、「ハッキー」ではありません。このままでいいよ。

于 2009-06-16T21:10:57.020 に答える