Summary Introduction What's New With 4.3.0 What's New With 4.2.0 What's New With 4.1.0 What's New With 4.0.0 WireBox 2.0.0 CacheBox 2.0.0 LogBox 2.0.0 Upgrading to ColdBox 4 About This Book Author Getting Started Guide Overview What is MVC What is ColdBox How ColdBox Works Installation Creating An Application Hello World Running An Application Reiniting An Application Testing An Application IDE Integration Configuration Conventions Directory Structure ColdBox.cfc Configuration Directives CacheBox ColdBox Conventions Datasources Environments Flash InterceptorSettings Interceptors Layouts LayoutSettings LogBox Modules ModuleSettings Settings WireBox Configuration Interceptor System Settings (Java Properties and Environment Variables) Using Settings Bootstrapper Event Handlers Locations Composed Properties How are events called? Get/Set Request Values Setting Views Relocating Rendering Data Model Integration Model Data Binding Advanced Data Binding Interception Methods Pre Advices Post Advices Around Advices HTTP Method Security Convention Methods Executing Events Event Caching Validation Best Practices Testing Handlers Request Context How Does It Work Views Interceptors What Can I Do With It? Request Context Decorator For What Can I Use This? Configuration Layouts & Views Response Types ColdBox Renderer Views Setting Views For Rendering Implicit Views Views With No Layout Views With Specific Layout Views From A Module View Caching Render Nothing Inline Rendering Content Variable Views Rendering External Views Rendering With Local Variables Rendering Collections View Helpers View Events Layouts Basic Layouts Default Layout Nested Layouts Overriding Layouts Layouts From A Module Layout Helpers Layout Events Implicit Layout/View Declarations Helpers UDF's Viewlets (Portable Events) Funky Viewlets ColdBox Elixir Models Domain Modeling Service Layer Data Layers Book Conventions Location WireBox Binder Super Type Usage Methods Injection DSL Model Object Namespace ColdBox Namespace CacheBox Namespace LogBox Namespace WireBox Namespace EntityService Namespace Object Scopes Coding: Solo Style Datasource Contact.cfc ContactDAO.cfc ContactService.cfc Contacts Handler Coding: ActiveEntity Style ORM Contact.cfc Contacts Handler Views Coding: Virtual Service Layer ORM Contacts.cfc Contacts Handler Views Coding: ORM Scaffolding ORM Contacts.cfc Scaffold Flash RAM Flash Storage Using Flash RAM Creating Your Own Flash Scope Routing Requirements Rewrite Rules Routes Configuration URL Routing Adding Routes Routing by Convention Handler Routing RESTful Action Routing View Routing Pattern Placeholders Numeric Placeholder Alpha Placeholder Regular Expression Placeholder Optional Placeholders Dynamic handler/action Placeholders Adding variables per route Route Responses Route Conditions Routing Namespaces Module Routes With Clousures Pathinfo Providers Building Routable Links HTML base tag Interceptors How do they work? Conventions Interceptor Declaration Interceptor Registration Core Interception Points Application Life Cycle Events Object Creating Events Layout-View Events Module Events CacheBox Events Restricting Execution Interceptor Output Buffer Custom Events Configuration Registration Programmatic Registration Listening Announcing Interceptions Unregistering Interceptors Reporting Methods Interceptor Asynchronicity Async Announcements Async Listeners With Join Async Listeners No Join Asynchronous Annotations Modules Core Modules Locations Parent Configuration Module Layout Changing The Module Layout Module Service Module Lifecycle Module Registration Module Activation Module Unloading Common Methods Loading New Methods Loading A-la-carte Modules Module Events ModuleConfig Public Module Properties/Directives The Decorated Variables The configure() Method Module Settings Environment Control Interceptor Events Module Event Executions URL Routing Default Route Execution Module Routes Files Request Context Module Methods Layout and View Renderings Layout/View Discovery Overriding Views Overriding Layouts Default Module Layout Explicit Module Renderings Models Module CF Mappings Module Dependencies Module Bundles Module Inception Testing Testing Concepts Functional Testing Non-Functional Testing Bugs Cost Money Static Testing Dynamic Testing Developer Focus Testing Vocabulary Testing Tools Test Harness ColdBox Testing Classes Integration Testing Test Annotations Common Methods Life-Cycle Events Test Setup The execute() Method The Handler To Test The Integration Test Handler Returning Results Testing Without Virtual Application Rendering Results HTTP Method Mocking Interceptor Testing Model Object Testing Tips & Tricks ColdBox Proxy Getting Started The Base Proxy Object The Event Handlers Distinguishing Request Types RenderData() Proxy Events Standard Return Types Caveats & Gotchas Recipes Building REST APIs Application Templates ColdBox Exception Handling Debugging ColdBox Apps Controller Decorator Clearing the View Cache Building a simple Basic HTTP Authentication Interceptor