Personally, I'd prefer the first approach. The validation method
should only be concerned with validating the form; it should not know
what to do if the form validates. However, it *would* make sense to do
it the other way around; ie. call the email method, which first calls
the validation method and acts accordingly.

As for 'sharing' variables between arguments within a single cfc, I'd
say you would always want to use the arguments scope for passing the
data around. Both these choices make for maximising the reusability of
your code.

Consider:

<cfcomponent output="false">
    <cfset variables._adminEmail = "" />

    <cffunction method="init" ...>
         <cfargument name="adminEmail" .../>
         <cfset _adminEmail = arguments.adminEmail />
         <cfreturn _adminEmail />
    </cffunction>

    <cffunction name="validateData"...><!--- uber simplified for sake
of example --->
          <cfargument name="foo" ... />
          <cfargument name="bar" ... />

          <cfif not Len(Trim(arguments.foo))>
               <cfreturn false />
          </cfif>
          <cfif not Len(Trim(arguments.bar))>
               <cfreturn false />
          </cfif>

          <cfreturn true />
    </cffunction>

    <cffunction name="sendEmail" ...>
          <cfargument name="foo" ... />
          <cfargument name="bar" ... />

          <cfif not ValidateData(arguments.foo, arguments.bar)><!---
or ValidateData(argumentCollection = arguments) would be fine --->
               <!--- some error handling code --->
          <cfelse>
               <cfmail from="#_adminEmail#" to="#arguments.foo#"
subject="#arguments.bar#" ...>
                   Hello world.
               </cfmail>
          </cfif>
    </cffunction>
</cfcomponent>

<!---- calling .cfm template --->
<cfscript>
     myComponent.sendEmail(argumentCollection = form);
</cfscript>

One final thing I would say is that, personally, I prefer not to use
argumentCollection if it is practical not to do so. If you know what
variables need to be passed from the form scope, write them out
explicitly; it will help with readability, ie.

myComponent.sendEmail( form.foo, form.bar );

I find argumentCollection really useful when needing to send in a
dynamic amount of arguments when there are lots of optional arguments
for a function. A good example would be in a reporting function that
takes several filters. So:

filters = structNew();
if(form.filterX NEQ 'any')
    filters.filterX = form.filterX;
if(form.filterY NEQ 0)
    filters.filterY = form.filterY;

myComponent.getReport( argumentCollection = filters )

HTH

Dominic

2008/11/1 Rick Faircloth <[EMAIL PROTECTED]>:
> Hi, Dominic and thanks for the reply...
>
> The second option sounds more like what I'm wanting to do.
>
> And while reading your response, it occurred to me that if I
> send the form data to a cfc for validation, and it validates,
> I could just go straight to another method (how about to another cfc?)
> for the email processing
> without going back to the orginal form page and then to the
> email processing cfc.  (make sense?)
>
> So, I would go from form page to validation method, and if all validates,
> straight to the email method to send emails.
>
> And from your description below, I would just refer to the
> arguments.variables
> in the second method as in the first?  No, I guess I couldn't use the
> "arguments" scope
> and share variables between methods...I'd need to put the data into the
> "variables" scope
> to share between methods.  Right?
>
> And, if that's so, I guess each form variable has to be established in
> the first validation
> method by translating each piece of data in to the variable scope with
> <cfset variables.name = arguments.name> in order to share those
> variables within a CFC.
>
> Am I correct?
>
> Thanks for the feedback.
>
> Rick
>
> Dominic Watson wrote:
>> Something like this?
>>
>> <cfif someObject.validateTheForm(argumentCollection = form) >
>>      <cfset variables.foo =
>> anotherObject.doSomethingWithForm(argumentCollection = form) />
>> <cfelse>
>>      Form did not validate
>> </cfif>
>>
>> Or, are you wanting to pass the form data to another cfc method from
>> within the validation method? If so, something like this:
>>
>> <cffunction name="validateTheForm" ...>
>>    <cfargument name="foo" ... />
>>    <cfargument name="bar" ... />
>>
>>    <cfscript>
>>         ...
>>         someOtherObject.doSomethingWithFormData( argumentCollection =
>> arguments ) ;
>>         ...
>>    </cfscript>
>> </cffunction>
>>
>> Dominic
>>
>> 2008/11/1 Rick Faircloth <[EMAIL PROTECTED]>:
>>
>>> Hi, all...
>>>
>>> Can form variables be passed around between a calling page and
>>> multiple cfc's?
>>>
>>> I have a form with data I want to validate, then generate an email with.
>>>
>>> I have the calling page with the form, which sends the form data via
>>> argumentCollection,
>>> to a form_validation.cfc.  If the form data passes validation, then I
>>> want to send the form
>>> data to an email_processing.cfc for email generation.
>>>
>>> Would the form variables be available to the calling page and both cfc's
>>> in this case?
>>> Or do I need to create session variables or another type of variable to
>>> pass the values
>>> around?
>>>
>>> Thanks,
>>>
>>> Rick
>>>
>>>
>>>
>>
>>
>
> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to 
date
Get the Free Trial
http://ad.doubleclick.net/clk;207172674;29440083;f

Archive: 
http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:314719
Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

Reply via email to