Метод получения ColdFusion - PullRequest
       2

Метод получения ColdFusion

3 голосов
/ 17 февраля 2011

Я отправляю значение переменной из http-адреса на другую страницу cfm, но я не уверен, как получить это значение на другой странице.В php мы используем $_GET['variable'];Я не уверен, что эквивалентно этому в ColdFusion.

Ответы [ 6 ]

12 голосов
/ 17 февраля 2011

У ColdFusion есть возможность доступа к этим переменным так же, как в PHP:

PHP:

$foo = $_GET['variablename'];
$bar = $_POST['variablename'];

CFScript:

foo = URL['variablename'];
bar = FORM['variablename'];

CFML:

<cfset foo = URL['variablename']>
<cfset bar = FORM['variablename']>

Редактировать: обсуждение нечувствительности к регистру области формы и обходного пути

ColdFusion (полезно?) Преобразует все имена полей формы в верхний регистр в области видимости формы. В случаях, когда имя поля повторяется, несколько значений будут объединены в одно значение, разделенное запятыми. Если у вас нет контроля над самой формой, это может привести к разочарованию.

С учетом формы:

<form name="main" action="handler.cfm" method="post">
  <input type="text" name="conFUSion" value="abc" />
  <input type="text" name="CONfusion" value="def" />
  <input type="submit" name="Submit" />
</form>

Область формы на принимающей странице будет выглядеть следующим образом:

Regular Form Scope

Но вы можете использовать gethttprequestdata().content, чтобы напрямую получить доступ к исходным полям и значениям, сохраненным в регистре, как опубликовано:

conFUSion=abc&CONfusion=def&Submit=Submit

Поскольку структуры ColdFusion не чувствительны к регистру, мы не можем просто разобрать эту строку в обычную структуру. Вместо этого мы можем обратиться к java.util.HashMap, который очень похож на структуру ColdFusion, но сохраняет регистр:

arFormscope = gethttprequestdata().content.split('&');
cs_form = createobject('java','java.util.HashMap').init();
for( i=1; i<=arraylen(arFormscope); i++ ){
  arElement = arFormscope[i].split('=');
  key = arElement[1];
  value = arElement[2];
  cs_form[key] = value;
}

Сбрасывая cs_form hashmap, мы получаем:

enter image description here

... и наконец:

cs_form['CONfusion']; // def
cs_form['conFUSion']; // abc
cs_form['CONFUSION']; // Error, undefined in java.util.HashMap
4 голосов
/ 17 февраля 2011

Используйте #URL.variable# для GET.Используйте #FORM.variable# для POST.

3 голосов
/ 17 февраля 2011

Достаточно хороших ответов, но я просто добавлю, что одна из приятных вещей в нотации ассоциативных массивов для доступа к структурным ключам заключается в том, что у вас все еще есть доступ к ключам, которые синтаксически недействительны.Поэтому, если вы создали страницу с именем test.cfm примерно так:

<cfdump var="#url#">
<cfoutput>
#url['bad bad var name']#<br />
</cfoutput>

И назвали ее так:

http://localhost/test.cfm?bad bad var name=foo

Вы увидите вывод 'foo' на странице.

Но если вы попробуете это:

<cfdump var="#url#">
<cfoutput>
#url.bad bad var name#
</cfoutput>

Вы увидите:

В строке 3 в столбце 10 обнаружена неверная конструкция CFML. ColdFusion просматривал следующий текст:

bad

Поскольку имена переменных не могут содержать пробелы.

Конечно, никто не будет намеренно называть параметр URL пробелом (я надеюсь), но это пригодится для таких вещей, как запросы, а внешние данные находятся вне непосредственного контроля разработчиков.

2 голосов
/ 17 февраля 2011

Вы можете получить к ним доступ, используя #url.variable#. Например, в PHP у вас может быть $_GET['id'], а в CF у вас будет #url.id#

0 голосов
/ 14 марта 2019

Метод получения ColdFusion

#URL.variable#

Получить данные формы из почтовых запросов от почтальона

 <cfif !isdefined ("FORM.firstname")>
        <!--- <cfoutput>first name is missing</cfoutput> --->
        <cfoutput> #sendjsonResponse("false","first name parameter required")#</cfoutput>
    </cfif>

Json retutn со статусом и сообщением

<cffunction name="sendjsonResponse" access="public" returnType="string">
    <cfargument name="status_param" type="string" required="true">
    <cfargument name="message_param" type="string" required="true">

    <cfset jsonObject = {
      status: arguments.status_param,
      message: arguments.message_param
      } />
    <cfset myJsonVar = serializeJSON(jsonObject) />
    <cfoutput>#myJsonVar#</cfoutput>
</cffunction>
0 голосов
/ 25 июля 2011

Я делал это раньше в Coldfusion 7.

Вы можете использовать значение cgi.query_string, чтобы получить строку запроса, а затем разделить следующим образом:

httpGetValues = createobject('java','java.util.HashMap').init();

nameValuePairs = cgi.query_string.split('&');
for( i=1; i lte arraylen(nameValuePairs); i = i + 1 ){
    pair= nameValuePairs[i].split('=');
    key = URLDecode(pair[1], "UTF-8");
    value = URLDecode(pair[2], "UTF-8");
    httpGetValues[key] = value;
}

Убедитесь, что вы декодируете значения.

...