Coldfusion Coldbox推荐的访问旧式应用程序cfc中的变量集的方法

Coldfusion Coldbox推荐的访问旧式应用程序cfc中的变量集的方法,coldfusion,lucee,coldbox,Coldfusion,Lucee,Coldbox,我将Coldbox添加到遗留应用程序中,遇到了一个问题,在使用Coldbox时无法从视图中访问某些变量。在onRequestStart方法中Application.cfc内部的现有遗留代码中,我们设置了几个变量,如下所示: VARIABLES.screenID = 0; VARIABLES.DSN = 'datasourcemain'; VARIABLES.DSNRO = 'datasourcereadonly'; VARIABLES.DSN

我将Coldbox添加到遗留应用程序中,遇到了一个问题,在使用Coldbox时无法从视图中访问某些变量。在onRequestStart方法中Application.cfc内部的现有遗留代码中,我们设置了几个变量,如下所示:

VARIABLES.screenID  = 0;
VARIABLES.DSN               = 'datasourcemain';
VARIABLES.DSNRO             = 'datasourcereadonly';
VARIABLES.DSNADMIN          = 'datasourceadmin';
VARIABLES.pagetitle         = "Default Page Title for web application";

这只是变量集的一小部分。问题是,在遗留代码中,这些代码被广泛使用,比如页眉和页脚。当浏览到遗留页面时,仍然可以访问这些页面,但当通过coldbox发送请求时,变量变得不可访问。我的问题是,有没有一种推荐的方法可以让Coldbox知道这些变量,并将它们传递给视图,这样我就不必修改数百个文件?

这取决于,有几个地方可以定义这些变量。根据给出的有限信息,我建议您将数据源信息添加到Coldbox.cfc>datasources结构(#1),并将默认页面标题添加到全局请求处理程序(#2)。至于屏幕ID,谁知道呢,祝你好运

  • config/Coldbox.cfc具有
    设置
    数据源
    结构,可通过wirebox注入处理程序/控制器

    // Dependency Injection using WireBox 
    property name='settings' inject='coldbox:settings';
    
  • 使用全局请求处理程序并将所有全局变量添加到控制器和视图可见的
    prc
    (私有请求上下文)中

    //config/Coldbox.cfc
    ...
    coldbox = {
      requestStartHandler: 'Main.onRequestStart'
    };
    ...
    
    // handlers/Main.cfc
    component extends='coldbox.system.EventHandler' {
      function onRequestStart( event, rc, prc) {
        prc.screenID  = 0;
        prc.DSN               = 'datasourcemain';
        prc.DSNRO             = 'datasourcereadonly';
        prc.DSNADMIN          = 'datasourceadmin';
        prc.pagetitle         = "Default Page Title for web application";
      }
    }
    
  • 使用请求拦截器并将数据添加到
    prc

    //config/Coldbox.cfc
    ...
    interceptors = [
      { class="interceptors.Globals" }
    ];
    ...
    
    //interceptor/Globals.cfc
    component {
      property name='legacyGlobals' inject='LegacyGlobals';
    
      function preProcess(event, interceptData) {
        event.setPrivateValue('someLegacyGlobalVar', legacyGlobals.getSomeLegacyGlobalVar() );    
      }
    }