2010-11-09 15 views
5

Estoy tratando de averiguar si existe una variable url, y si no, asegúrese de que no esté vacía.Coldfusion 8: IsDefined ('URL.variable') y no es ""?

Esto no funciona:

<cfif IsDefined('URL.affiliateId') and is not ""> 
    // 
</cfif> 
+2

Todas las respuestas a continuación funcionan, pero FYI structKeyExists() es más eficiente que isDefined(), y len() es más eficiente que NEQ "". Trim() es opcional, pero no es una mala idea incluir eso. – Henry

+0

Creo que una mejor razón para usar structKeyExists() es la precisión. IsDefined() tiene un alcance un poco más amplio, que ocasionalmente puede generar resultados inesperados. – Leigh

Respuesta

14
<cfif structKeyExists(url, 'affiliateID') and trim(url.affiliateID) neq "">...</cfif> 
+0

buen punto en el recorte, Leigh. Olvidé incluir eso! – scrittler

+0

Ah, mucho mejor. (Siempre me sorprende cuántas formas puedes escribir este tipo de cosas ;-) – Leigh

+2

También se ha demostrado que sturctKeyExists es más eficiente que IsDefined. –

0
<cfif IsDefined('URL.affiliateId') and URL.affiliateId neq ""> 
    // 
</cfif> 
+0

No necesita los signos #. – Leigh

+1

Como dice Leigh: no se requieren los números, y si conoces el alcance y el nombre de la variable siempre debes usar structkeyexists() como lo muestra scrittler –

+0

, sí sé que se requieren #, es solo uno de esos hábitos. – Harrison

1

Ignorar más espacio en blanco

<cfif IsDefined('URL.affiliateId') and len(trim(URL.affiliateId))> 
    value is defined and not empty 
</cfif> 

... o, alternativamente

<cfif IsDefined('URL.affiliateId') and len(trim(URL.affiliateId)) gt 0> 
    value is defined and not empty 
</cfif> 
4

También puede simplificar un poco la lógica usando <cfparam> para asegurarse de que la variable URL siempre exista. A continuación, en lugar de tener 2 condiciones, sólo tiene 1.

<cfparam name="URL.affiliateId" type="string" default="" /> 

<cfif trim(URL.affiliateId) is not ""> 
    do stuff here 
</cfif>
+0

Es cierto. Si la existencia de la variable no afecta negativamente al código existente (no estaba seguro), entonces cfparam puede simplificar las cosas – Leigh

0

me limitaré a resumir las respuestas y ofrecer mi versión de la misma:

<cfparam name="URL.affiliateId" type="string" default="" /> 

<cfif len(trim(URL.affiliateId))> 
    ...do something with the affiliate... 
</cfif> 

No necesita structKeyExists o IsDefined y sería ser mejor para evitarlos Además, no necesita la parte 'mayor que cero' después de 'len()'.

+2

No hay casos de uso perfectamente válidos para todo lo anterior. La preferencia personal, por otro lado, es un asunto diferente. – Leigh

+0

Sí, son válidos pero no necesarios. –

+1

Si bien hay similitudes en el comportamiento, también existen diferencias. Por lo tanto, una afirmación general de que nunca se necesitan es inexacta. No todos proporcionan la funcionalidad _identical_. – Leigh

Cuestiones relacionadas