Установка динамических переменных приложения ColdFusion из запроса - PullRequest
1 голос
/ 08 мая 2009

Я дурачилась и подумала, что было бы неплохо переместить переменные моего приложения в таблицу, которая может быть загружена на ApplicationStart.

Мое намерение состоит в том, чтобы позволить ANT развернуть приложение и изменить несколько настроек в базе данных и пресловутом престо ..

В моем тестовом коде application.cfc имеет простой запрос для вызова всех имен переменных, а затем cfloop для установки каждой переменной в области приложения как application.varname.

Об ошибке наApplicationStart не сообщается. Однако попытка ссылки на переменные приводит к неопределенной ошибке типа.

Мои паучьи чувства говорят мне, что это что-то маленькое и очевидное ... есть идеи?

Спасибо !!

Обновление 1: кажется, что я смотрю на установку динамических имен переменных, и тот факт, что они являются переменными приложения, похоже, не оказывает большого влияния ..

http://www.bennadel.com/blog/152-Dynamic-ColdFusion-Variables-Via-Quoted-Naming.htm

Ответы [ 4 ]

6 голосов
/ 09 мая 2009

Я не знаю, защищал ли автор этот синтаксис или просто демонстрировал, что он работает, в качестве точки интереса.

Лично я предпочитаю обозначение массива. Я думаю, что это помогает продвигать хорошие привычки.

<!--- array notation --->
<cfset scope["staticName"& dynamicPortion] = "some value"> 

<!--- example 1  --->
<cfset variables["baseName"& x] = "oh brother">
<!--- example 2  --->
<cfset variables["baseName#x#"] = "oh brother">
4 голосов
/ 08 мая 2009

Ответ на мой вопрос состоял в том, чтобы задать имена динамических переменных, заключив их в кавычки

<!--- Loop over the girls and alter the values. --->
<cfloop index="intGirl" from="1" to="3">

<!--- Randomly pick 1 (true) or 0 (false). --->
<cfif RandRange( 0, 1 )>

<!--- Set the dynamic variable naming used quoted evaluation. --->
<cfset "Girl#intGirl#" = "super sexy" />

</cfif>

</cfloop>

Подробнее здесь ...

http://www.bennadel.com/blog/152-Dynamic-ColdFusion-Variables-Via-Quoted-Naming.htm

3 голосов
/ 08 мая 2009

использовать cfloop + cfset not cfoutput

2 голосов
/ 08 мая 2009

Если я правильно читаю ваш вопрос, вы говорите, что устанавливаете переменные приложения внутри тега cfoutput?

Используете ли вы cfoutput как

<cfoutput query="queryName">
  <!--- Setting code in here --->
</cfoutput>

Вы должны использовать cfloop вместо cfoutput

<cfloop query="queryName">
  <cfset application.varName = queryName.varName />
</cfloop>

Трудно помочь без кода.

Мой вопрос таков: зачем вам сначала хранить переменные приложения в базе данных, если вы просто собираетесь сбросить их обратно в область приложения?

...