Можем ли мы иметь cfparam с позиционными атрибутами в стиле сценария? - PullRequest
4 голосов
/ 07 ноября 2019

@ Devs, здесь я пишу код на основе сценария для моего приложения. В процессе разработки я сталкиваюсь с такой проблемой, как Найдена неверная конструкция CFML

Пример кода:

<cfscript>
    cfparam(name="userID", default=0);  // Named attributes are accept in script based code.
    cfparam("myName", 'Kannan'); // Without named attributes. It's return the error. 
    writeDump(userID);
    writeDump(myName);
</cfscript>

enter image description here

Я не уверен, разрешил ли ACF позиционные значения (без именованного параметра) в cfparam или нет в стиле кодирования на основе сценариев.

БЮР: Мы можем использовать writedump, как показано ниже

writeDump(var = userID);
writeDump(userID);

Оба возвращают одинаковый результат. Не только writedump большинство функций здания поддерживает именованные атрибуты, а также позиционные атрибуты.

Аналогично, почему cfparam не поддерживает это. Поправьте меня, если я допустил ошибку в своем коде cfparam или что-то не так понял.

Заранее спасибо!.

Ответы [ 2 ]

4 голосов
/ 07 ноября 2019

Что ж, довольно интересно посмотреть, как это работает в фоновом режиме, заглянув в cfusion.jar. Так как я на самом деле не Java-человек, не совсем уверен, что моя интерпретация верна или нет. Позвольте мне попробовать.

Внутри cfscript любая функция, которая начинается с cf, рассматривается как тег ColdFusion вместо функции.

То, что я вижу, это как cfparam,Вы также можете использовать больше функций (и больше).

cfquery
cfsavecontent
cfinclude
cfthrow
cfabort

Я был немного удивлен, увидев, что следующий синтаксис работает в ColdFusion (я не уверен, есть ли какая-либо документация, которая детализирует этот синтаксис).

<cfscript>
  cfquery(name="test", datasource=application.dsn){
    writeOutput('select * from user where userid = ');
    cfqueryparam(value="1", cfsqltype='integer');
  };
  cfdump(var=test);
</cfscript>

Таким образом, чтобы точно так же, как вы не можете определить тег ACF без указания имени для атрибута, любая функция с <cfscript>, начинающаяся с имени тега coldfusion, будет нуждаться в именованных аргументах.

Скорее всего, это было реализовано для CF9 или более поздней версии, чтобы получить поддержку cfscript. Более поздние версии имеют свои независимые реализации каждого тега без префикса cf.

как

param name="test" default="";
savecontent variable="errortext" {
  writeOutput("Application: #test#");
}
2 голосов
/ 07 ноября 2019

Это все способ много печатать. Хотя возможно получить <cfparam, гораздо проще просто использовать ключевое слово param

 param userID = 0;
 param myName = 'Kannan';
...