2009-06-16 12 views
2

Je souhaite gérer un scénario dans lequel l'utilisateur tape une URL de /somePage.cfm lorsque ce modèle n'existe pas et utilise un modèle provenant d'un autre répertoire. Je sais que je peux le faire via des réécritures dans Apache, etc. mais je ne veux pas vraiment stocker la logique là-bas, donc j'ai essayé d'écraser le comportement onTemplateMissing dans mon Application.cfc. Il semble fonctionner correctement dans mes tests mais je suis inquiet en faisant cette solution hacky Je suis en train de couper certaines parties que je n'ai pas encore vues (par exemple des méthodes que je n'utilise pas actuellement comme onSessionStart etc.) et peut rencontrer des problèmes dans le futur.Substitution de la gestion onMissingTemplate dans Application.cfc

Voici ce que je suis en train de faire:

<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> 

Notez que aussi dans ma méthode onRequest je fais le traitement supplémentaire pour les modèles qui isFooTemplate() reviendriez vrai.

Répondre

4

Je ne pense pas que ce soit une solution hacky. C'est à quoi sert la méthode, et en retournant false, ColdFusion invoquera le gestionnaire d'erreur standard que vous avez configuré dans l'administrateur si vous le souhaitez.

Le seul cas où onSessionStart() n'a pas été exécuté est si l'utilisateur tape le onMissingTemplate() lors de la toute première demande de page. Si vous avez besoin d'une session pour l'utilisateur, vous pouvez vérifier l'existence de la portée de la session, car la portée de la session est supposée être disponible dans la méthode onMissingTemplate() et être gérée de manière appropriée.

2

Il est en fait onMissingTemplate pas onTemplateMissing; et c'est une pratique recommandée, pas du tout "hacky". Vous allez bien de cette façon.

Questions connexes