Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

application variables in a CFC

4 views
Skip to first unread message

whatchamakeofit

unread,
May 11, 2009, 7:04:49 PM5/11/09
to
I have some application variables declared in my Application.cfm file,
and I want to be able to use them in my CFC. However, I've noticed
that if I try to access an application variable (say, a datasource), I
get an error saying "Variable XXX is undefined." So, I did some
research and supposedly, it's bad practice to access application
variables in a CFC. Not only is it a bad practice, but it doesn't
even seem like it's possible in the first place without running into
an error. What I'm wondering is, if it's such a bad thing to do, then
what's the worst that can happen? Someone mentioned portability, but
I'm still having trouble making the connection.

I've searched all over, and the "best" reason I could find is that
CFCs shouldn't be accessing anything outside of the CFC, hence
breaking encapsulation. If that's the case, then can someone provide
a concrete example where if I did access an application variable in a
CFC, then all hell would break loose? Most best practices have some
good logical reason behind them, which is all good and dandy, but this
particular one seems to fall in the category of "you should follow
this, but there are much worse things that can happen." Please
advise. Thanks

Egils

unread,
May 12, 2009, 8:32:42 AM5/12/09
to
I had the same exact problem when I started to incorporate CFC files
into my applications. Instead of "variables" I started to use
"request" scope variables. "Request" scope variables can be defined in
application.cfm and used in subsequent .cfc modules. For example:

application.cfm
...
<cfset request.db_variable="my_sql_db">
...

OOB.cfc
...
<cfquery name="incaspulated_qry" datasource="#request.db_variable#">
...

whatchamakeofit

unread,
May 12, 2009, 1:46:33 PM5/12/09
to
I forgot to point out that I'm running CF 6 so creating an
Application.cfc and putting the dsn in OnApplicationStart() is out of
the question.

I found out that rather than using an application variable, people
just pass the variable via an argument to the CFC. Seems kinda
kludgy, but I guess that might be my only option.

Putting the dsn in the request scope is interesting. I've never seen
it done that way before. What's the motivation behind that, out of
curiosity?

simplico

unread,
May 16, 2009, 10:09:55 AM5/16/09
to

why don't you pass the application variable to the cfc as an argument
instead of accessing it directly in cfc? or if it's something like
datasource value create a this variable in the cfc and initialize
value through/in an init function.

http://www.coldfusionjedi.com/index.cfm/2007/6/22/Find-the-bug

See the comment by me (simplico).

Hope this helps!

0 new messages