2010-11-09 20 views
5

Tôi đang cố gắng tìm hiểu xem biến url có tồn tại không và nếu không, hãy đảm bảo rằng biến đó không trống.Coldfusion 8: IsDefined ('URL.variable') và không phải là ""?

này không hoạt động:

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

Tất cả các câu trả lời dưới đây hoạt động, nhưng FYI structKeyExists() hiệu quả hơn sau đó được Defined() và len() hiệu quả hơn sau đó là NEQ "". Trim() là tùy chọn nhưng không phải là một ý tưởng tồi để bao gồm điều đó. – Henry

+0

Tôi nghĩ rằng một lý do tốt hơn để sử dụng structKeyExists() là chính xác. IsDefined() có phạm vi rộng hơn một chút, đôi khi có thể dẫn đến kết quả không mong muốn. – Leigh

Trả lời

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

điểm tốt trên trang trí, Leigh. Quên để bao gồm điều đó! – scrittler

+0

Ah, tốt hơn nhiều. (Tôi luôn ngạc nhiên về cách bạn có thể viết loại điều này ;-) – Leigh

+2

Ngoài ra nó đã được chứng minh là sturctKeyExists hiệu quả hơn IsDefined. –

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

Bạn không cần # dấu hiệu. – Leigh

+1

Như Leigh nói: không có yêu cầu, cộng với nếu bạn biết phạm vi và tên biến bạn nên luôn luôn sử dụng structkeyexists() như được hiển thị bởi scrittler –

+0

vâng tôi biết rằng #s là bắt buộc, nó chỉ là một trong những thói quen đó. – Harrison

1

Để bỏ qua hầu hết các khoảng trắng

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

... hoặc xen kẽ

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

Bạn cũng có thể đơn giản hóa logic một chút bằng cách sử dụng <cfparam> để đảm bảo rằng biến URL luôn tồn tại. Sau đó, thay vì phải 2 điều kiện, bạn chỉ cần 1.

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

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

Đúng. Nếu sự tồn tại của biến không ảnh hưởng tiêu cực đến mã hiện tại (tôi không chắc chắn), thì cfparam có thể đơn giản hóa mọi thứ – Leigh

0

Tôi chỉ sẽ tổng hợp các câu trả lời và cung cấp phiên bản của tôi về nó:

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

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

Bạn không cần structKeyExists hoặc isDefined và nó sẽ tốt hơn là tránh chúng. Ngoài ra, bạn không cần phần 'lớn hơn 0' sau 'len()'.

+2

Không có trường hợp sử dụng hoàn toàn hợp lệ nào cho tất cả các điều trên. Mặt khác, sở thích cá nhân là một vấn đề khác. – Leigh

+0

Có, chúng hợp lệ nhưng không cần thiết. –

+1

Trong khi có những điểm tương đồng về hành vi, cũng có sự khác biệt. Vì vậy, một tuyên bố chăn rằng họ _never_ cần thiết là không chính xác. Họ không phải tất cả đều cung cấp chức năng _identical_. – Leigh

Các vấn đề liên quan