我尝试使用Application.cfc
重写系统中的.cfc
和其他cfscript
文件。有几件事我不确定它们在cfscript中如何工作。我想知道在函数内部定义变量。例如onRequestStart()
函数如下所示:
function onRequestStart(required string thePage) returntype="boolean" output="false" {
var request.appCode = "MyApp";
var request.appName = "Single Page Application";
var page = listLast(arguments.thePage,"/");
var onApplicationStart();
if(!listFindNoCase("Home.cfm,Auth.cfc",page)){
if(structKeyExists(SESSION, "loggedin") AND SESSION.loggedin EQ false){
location(url="https://www.myapp.org", addToken="false");
}
}
return true;
}
在定义var
变量的情况下,是否需要使用request/session
一词?如果我是最佳做法,请使用var word或使用local.variablename
? local
中的variables
和cfscript
是否相同?
答案 0 :(得分:6)
var
仅用于局部变量。这意味着在函数定义之外不可访问的变量。 Session
和Request
分别可用于每个会话和请求。将它们放在var
范围内会产生可怕的结果。
您可以使用var
或local
,它们都具有“本地”范围。 Variables
是页面范围,并且Variables
范围中定义的任何变量将可供CFC中的所有功能访问。
function onRequestStart(required string thePage) returntype="boolean" output="false" {
request.appCode = "MyApp";
request.appName = "Single Page Application";
var page = listLast(arguments.thePage,"/");
//this is a function call and not variable declaration.
onApplicationStart();
if(!listFindNoCase("Home.cfm,Auth.cfc",page)){
if(structKeyExists(SESSION, "loggedin") AND SESSION.loggedin EQ false){
location(url="https://www.myapp.org", addToken="false");
}
}
return true;
}
答案 1 :(得分:3)
var
不等于<cfset>
标签,即,切换到CFScript语法时,您无法进行简单的搜索和替换。
var
仅用于局部变量定义。这意味着,设置结构和数组项(例如request
,session
和其他范围变量)不应以var
为前缀。
另外,函数调用必须写在var
之前。
local
和var
均引用本地范围。尽管要注意,如上所述,但是如果您想通过local.something
定义变量,则也不需要var
关键字。
variables
与local
相反,是指页面范围,可从组件内的任何位置以及任何包含的页面访问该页面范围。
有关不同范围的更多信息,您应该read the Adobe docs。