Skip to content

Instantly share code, notes, and snippets.

@jonkarna
Created December 8, 2009 22:04
Show Gist options
  • Save jonkarna/252035 to your computer and use it in GitHub Desktop.
Save jonkarna/252035 to your computer and use it in GitHub Desktop.
Making a contact form restful with Mach-II / Coldfusion
<mach-ii version="1.5">
<event-filters>
<event-filter name="RESTfulFilter" type="model.RESTfulFilter" />
</event-filters>
<event-handlers>
<event-handler event="contact">
<filter name="RESTfulFilter">
<parameter name="get" value="contact.form" />
<parameter name="post" value="contact.action" />
</filter>
</event-handler>
<event-handler event="contact.form" access="private">
<event-arg name="contentPieceMappingName" value="contact" />
<notify listener="ContentListener" method="getContentPiece" />
<event-arg name="theme" value="white" />
<notify listener="ReCaptchaListener" method="getReCaptcha" resultArg="reCaptcha" />
<view-page name="contact" contentArg="content" />
<execute subroutine="layout.default" />
</event-handler>
<event-handler event="contact.action" access="private">
<notify listener="ReCaptchaListener" method="eventArgValidation" resultArg="reCaptchaValid" />
<event-bean name="Contact" type="model.Contact" />
<filter name="FormValidator">
<parameter name="formObjectName" value="Contact" />
<parameter name="invalidEvent" value="contact.form" />
</filter>
<notify listener="ContactListener" method="addContact" />
<event-arg name="contactsent" value="1" />
<redirect event="contact" args="contactsent" />
</event-handler>
</event-handlers>
</mach-ii>
<cfcomponent display="RESTfulFilter" extends="MachII.framework.EventFilter">
<cffunction name="filterEvent" returnType="boolean">
<cfargument name="event" type="MachII.framework.Event" required="true" />
<cfargument name="eventContext" type="MachII.framework.EventContext" required="true" />
<cfargument name="paramArgs" type="struct" required="false" default="#StructNew()#" />
<cfset var requestMethod = cgi.REQUEST_METHOD />
<cfset var _method = arguments.event.getArg("_method", requestMethod) />
<cfset var restMethod = "" />
<cfif LCase(requestMethod) eq "get">
<cfset restMethod = "get" />
<cfelseif LCase(_method) eq "put">
<cfset restMethod = "put" />
<cfelseif LCase(_method) eq "delete">
<cfset restMethod = "delete" />
<cfelse>
<cfset restMethod = "post" />
</cfif>
<cfif StructKeyExists(paramArgs, restMethod)>
<cfset announceEvent(paramArgs[restMethod], arguments.event.getArgs()) />
<cfelse>
<cfthrow message="No event specified for REST method '#restMethod#'" />
</cfif>
<cfreturn false />
</cffunction>
</cfcomponent>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment