2015-10-30 3 views
1

cela semble être une question simple mais je n'ai pas trouvé la réponse. Si j'ai un chemin de composant "pathToComponent", comment puis-je valider qu'il est valide? En ce moment j'ai recours à essayer/attraper, mais sûrement il y a une manière plus élégante?Comment valider un nom de chemin de composant dans ColdFusion/Lucee

boolean function isValidComponent(required string pathToComponent){ 

    try{ 
     var metaData = getComponentMetaData(arguments.pathToComponent); 
     return true; 
    } 
    catch(any e){ 
     return false; 
    } 
} 

Merci!

+2

Est-ce le pathToComponent en passant par un chemin de fichier réel ou une notation par points? Si un chemin réel vous pouvez faire soit un directoryExists() ou un fichierExists(). Si c'est la notation par points, vous pouvez remplacer les points par des barres obliques et fileExists() ... –

+0

J'étais inquiet pour les situations où pathToComponent n'est pas le chemin complet, mais par rapport au composant appelant ou enfant. Cela le briserait. Mais peut-être que je devrais juste exiger que pathToComponent soit un chemin complet. – user2943775

+0

Si vous faites référence à la possibilité de créer une instance d'un composant, l'approche try/catch est la meilleure. Vous devriez cependant envisager de mettre en cache le résultat (côté serveur). – Alex

Répondre

0

Si vous voulez tester si le chemin composant peut être utilisé pour créer un composant, utilisez:

boolean function isValidComponent(required string pathToComponent) { 

    try { 

     createObject("component", ARGUMENTS.pathToComponent); 
     return true; 
    } 
    catch(any) { 
    } 

    return false; 
} 

Si vous souhaitez accéder au composant physiquement, utilisez:

string function getComponentLocation(required string pathToComponent) { 

    var normalizedPath = replaceNoCase(ARGUMENTS.pathToComponent, ".", "/", "ALL"); 
    var resolvedPath = expandPath(normalizedPath); 
    var fileLocation = (resolvedPath & ".cfc"); 

    return fileLocation; 
} 
+0

Je construis une fonction analyseur donc je suis intéressé par votre deuxième fonction. Cependant, il ne peut pas faire la différence entre les chemins absolus et relatifs. Par exemple si mon chemin est "com.order.billing", il devrait se résoudre à "/com/order/billing.cfc" (avec la barre oblique d'ouverture) mais si j'appelle "shipping" de billing.cfc, il devrait résoudre à "shipping.cfc" (sans la barre oblique d'ouverture). – user2943775

+0

Maintenant que j'y pense, peut-être que je devrais vérifier d'abord si le chemin relatif existe, sinon vérifier le chemin absolu. Merci! – user2943775