Blog

Brad Wood

September 19, 2012

Spread the word


Share your thoughts

 

In ColdBox, controllers or event handlers as we call them are defined as CFCs.  Part of the power of this is that you can share and extend code in your applications by simply extending one handler with another.  
 
Imagine a reporting framework where a number of reports will all have a criteria page, validation, execution, and export data action with most of the logic, views, layouts, and models the same between every report while still allowing for customizations on a per-report basis.
 
You could set up a base report handler that contained shared stuff like so:
 
component name="BaseReport" extends="coldbox.system.eventhandler" output="false"
{
  property name="ReportService" inject;
  
  public function init(Controller){
    super.init(arguments.controller);
    return this;
  }
  
  function criteria(Event, rc, prc){
    // Common Code
  }
  
  function execute(Event, rc, prc){
    // Common Code
  }
  
  function showResults(Event, rc, prc){
    // Common Code
  }
  
}
 
And then extend it per report with concrete handlers that add their own customizations:
 
 

component name="MyReport" extends="BaseReport" output="false"

{

  property name="myReportDAO" inject;

 

  function criteria(Event, rc, prc){

    super.criteria(Event, rc, prc);

    // Add in custom goodness for this report.

  }

}

 
More info on how amazing handlers are here: http://wiki.coldbox.org/wiki/EventHandlers.cfm
 
P.S. Remember, since ColdBox is chock full of choices, your event handlers don't have to eventually extend coldbox.system.eventhandler.  We could leave off the extends and the super.init() call on our BaseReport and WireBox will use virtual inheritance to ensure the handler has everything it needs.
 

 

Add Your Comment

Recent Entries

BX-AI 1.2 Released: Claude 4 Support, New Tooling API, CFML Compatibility & More!

BX-AI 1.2 Released: Claude 4 Support, New Tooling API, CFML Compatibility & More!

We’re excited to announce the release of BoxLang AI v1.2, a major update to the BoxLang AI module that powers intelligent applications with a unified AI abstraction layer across even more providers: OpenAI, Claude, Grok, Gemini, and more. This release packs new features for providers, tools, debugging, and customization — making it easier than ever to build multi-runtime, AI-driven BoxLang and CFML applications.

Luis Majano
Luis Majano
June 19, 2025
Ortus Solutions invited at America Digital 2025

Ortus Solutions invited at America Digital 2025

Our participation is more than a presence, it is a commitment to represent El Salvador’s growing influence in the global tech ecosystem and to inspire others to embrace modern software practices.

This invitation is a recognition of our contributions to open source and a reminder of the importance of building with purpose. Whether through BoxLang, ColdBox, or any of our other tools, our focus remains the same: to empower developers, elevate teams, and enable the future of digital transformation.

Maria Jose Herrera
Maria Jose Herrera
June 18, 2025
Introducing the BoxLang Version Manager!

Introducing the BoxLang Version Manager!

We're excited to announce the release of BVM (BoxLang Version Manager), a powerful new tool that makes managing multiple BoxLang installations effortless across Mac, Linux, and Windows Subsystem for Linux (WSL). Whether you're a BoxLang developer working on multiple projects or testing across different versions, BVM is designed to streamline your workflow.

Luis Majano
Luis Majano
June 17, 2025