2009-05-21 6 views
2

Auparavant (et localement), j'ai placé le répertoire fusebox5 dans la racine Web, puis les applications depuis n'importe quel endroit de l'arborescence ont pu y accéder. J'avais précédemment utilisé Application.cfm plutôt que .cfc.Installation de Fusebox sans accès à la racine Web

Dans cet environnement, je n'ai pas accès au webroot et les fichiers FB n'ont pas vraiment besoin d'être aussi loin, donc j'avais prévu de les stocker à côté des applications. Ai-je raison de penser qu'index.cfm est négligé si Application.cfc est utilisé (et donc il ne sert à rien de changer la valeur de cfinclude pour être par exemple ../fusebox5/)? Si oui, comment puis-je inclure le framework sans avoir Fusebox dans la racine ou dans un mapping? L'erreur est:

Could not find the ColdFusion Component or Interface fusebox5.Application. 

Répondre

1

Vous pouvez exécuter Fusebox 5+ dans un sous-dossier de la racine de votre application. Ce n'est peut-être pas la chose la plus évidente pour le faire fonctionner.

Malheureusement, vous ne pouvez pas créer de mappage dynamique pour étendre Application.cfc, car votre application Application.cfc n'a pas encore été instanciée - vous obtenez un scénario de poulet contre oeuf. Vous ne pouvez pas créer le mappage vers Fusebox, car votre fichier Application.cfc n'a pas démarré. Vous ne pouvez pas démarrer Application.cfc car il ne trouve pas le composant qu'il est censé étendre.

CECI EST UN DANS COLDFUSION 8. ColdFusion doit rechercher des correspondances dans cet ordre:

  • dossiers CF mappée de l'administrateur
  • Les sous-répertoires hors du répertoire courant
  • Les sous-répertoires web au large de la root appelé

Il le fait lorsque vous utilisez CreateObject(), mais pas lorsque vous utilisez l'attribut Extends sur cfcomponent. La solution la plus simple est d'utiliser Application.cfc comme vous le feriez pour n'importe quelle application, puis d'inclure fusebox depuis votre index.cfm. Votre structure de dossier ressemblerait à ceci:

/myapp/fusebox5/ 
/myapp/index.cfm 
    -- consists of <cfinclude template="fusebox5/fusebox5.cfm" /> 

Votre fichier index.cfm ne sera pas ignoré aussi longtemps que vous n'interceptent pas la demande avec OnRequest de Application.cfc, ou si vous utilisez OnRequest, assurez-vous d'inclure la cible prévue (qui sera presque toujours index.cfm de toute façon).

Si vous ne souhaitez pas que index.cfm soit inclus dans l'include, vous pouvez demander à la méthode OnRequest de votre Application.cfc d'exécuter cfinclude.

<cffunction name="onRequest"> 
    <cfinclude template="fusebox5/fusebox5.cfm"> 
</cffunction> 

Vous pouvez toujours besoin d'un index.cfm si votre serveur Web ne donnera pas une liste de répertoires ou 404, mais il est ok si le fichier est vide.

2

Non, votre application aura toujours besoin d'index.cfm. Ce dont vous aurez besoin est un mappage d'application cf pour Fusebox dans votre Application.cfc. Regardez le Application.cfc template de Ray Camden pour un exemple de configuration de mappages spécifiques à une application.

0

En Application.cfc:

<cfscript> 
    this.mappings = {}; //create a new structure to store app-specific mappings 
    this.mappings["Fusebox"] = expandPath('./Fusebox'); //add mapping 
</cfscript> 
+1

Le mappage fonctionnera, mais si vous essayez d'étendre un composant dans ce mappage (fusebox5.Application), il sera rompu. Vous ne pouvez pas créer une instance de Application.cfc tant qu'elle n'a pas trouvé le composant étendu, mais vous ne pouvez pas trouver le composant étendu tant que vous ne l'avez pas mappé. Échouer. –

Questions connexes