Executing Coldbox Events in Legacy Code
A quick tip for future Jason or anyone else who may work with Coldbox and legacy code (not MVC) running side-by-side. I found this well documented in the Coldbox Documentation but wanted to post it as a quick reference for myself.
MyHandler.cfc
Here the action is defined with a widget argument. When running it as a widget it will return the rendered content. Otherwise it is ran as a regular Coldbox request.
component extends="coldbox.system.EventHandler" {
function myEvent(event,rc,prc,widget=false) {
prc.message = "Test from Coldbox event";
if (arguments.widget) {
return renderView("main/myView");
}
event.setView("main/myView");
}
}
main/myView.cfm
Simple view that just outputs the message.
<cfoutput>#prc.message#</cfoutput>
legacy.cfm
Now I call the Coldbox event from my legacy code like so.
<cfoutput>#application.cbController.runEvent(event="MyHandler.myEvent",eventArguments={widget=true})#</cfoutput>
UPDATE: 11/29/2016
I found out that since my legacy code was not running inside a Colbox request that I also needed to populate the Coldbox RequestContext so the event had access to any url or form scope parameters.
<cfset application.cbController.getRequestService().requestCapture()>
<cfoutput>#application.cbController.runEvent(event="MyHandler.myEvent",eventArguments={widget=true})#</cfoutput>