Don't know if this will actually help or hinder nate in his efforts,
but I made it work like this:

http://bakery.cakephp.org/articles/view/multiple-rules-of-validation-per-field-in-cakephp-1-2#1943

The basic principle is : define a "magic constant" to use in the
$validation array to mean "manual", then call Model::invalidate()
manually inside the validation method. It does involve overriding
AppModel::invalidate(), but it works.

On Mar 9, 4:45 pm, nate <[EMAIL PROTECTED]> wrote:
> Well, I'm *sort of* in the middle of doing it, but if you could
> provide unit tests for it, that would be fantastically useful.  Just
> open an enhancement ticket and attach the diff.  If you can do that,
> I'll try and get to it sometime today.
>
> On Mar 9, 3:49 am, Mike <[EMAIL PROTECTED]> wrote:
>
> > Having read John David Anderson (_psychic_)'s second post 
> > tohttp://groups.google.com/group/cake-php/browse_thread/thread/7acc2b07...,
> > I was wondering if it would be helpful if I put a proposed code change
> > (including some unit tests) to do this.  If this has been spec'd out
> > at all, I'd be happy to follow that.  If not, I'd be happy to code up
> > (and document) something that allows the validation method to change
> > the 'message' element of the $ruleParams array, and have that change
> > stick.
>
> > I also understand that this can be one of those 'Mythical Man Month'
> > sorts of things - if it would be faster for y'all to just do this on
> > your own, that's fine by me, too.
>
> > Thanks!
> > --Mike
>
> > On Mar 8, 11:24 pm, Mike <[EMAIL PROTECTED]> wrote:
>
> > > Awesome!! Thank you very much!
>
> > > (I do understand that this decision was made independent of my
> > > questions about this feature, but I figure that it's a nice feature
> > > that I'm looking forwards to, and so saying 'Thanks' seems to be a
> > > good thing to do :)  )
>
> > > Thanks!
> > > --Mike
>
> > > On Mar 8, 6:42 am, nate <[EMAIL PROTECTED]> wrote:
>
> > > > This will be implemented before the next release.
>
> > > > On Mar 7, 8:26 pm, Mike <[EMAIL PROTECTED]> wrote:
>
> > > > > Thanks for your suggestion - I was thinking about that, and here's
> > > > > what I came up with.  If you can see any holes/offer any refinements,
> > > > > I'd love to hear about them :)
>
> > > > > Part of the reason I'm against this is that I've already got a
> > > > > function that does what I want, and I'm looking to reuse it in
> > > > > CakePHP, rather than redo everything the Cake way.
>
> > > > > Another part is that I think that if I redo this in Cake, it'll end up
> > > > > being more awkward, because I want this functionality to be used for
> > > > > multiple fields (so I'll need the same collection of rules, for each
> > > > > and every field).
>
> > > > > My goal:
> > > > > I want to create a directory on the server, so that users can upload
> > > > > files to the server.  When the 'superuser' creates the directory, I
> > > > > want there to be 2 options:
> > > > > 1) Use an existing directory
> > > > > 2) Use an existing directory if it's there, and create it if not.
>
> > > > > So, breaking this down into pieces, it seems like there are a couple
> > > > > of steps:
> > > > > 1) If the directory exists:
> > > > > 1.1) If it's writable, then we're done & we're good
> > > > > 1.2) If it's NOT writable, then we're done & we've got an error
>
> > > > > 2) If it doesn't exist:
> > > > > 2.1) If the user has elected to create the directory when it doesn't
> > > > > exist,
> > > > >           then create it
> > > > >    2.1.1) We may encounter errors trying to create the directory
>
> > > > > 2.2) If the user has elected to NOT create the directory when it
> > > > > doesn't exist
> > > > >           then we're done, and we've got an error
>
> > > > > Basically, the user types the directory into a textbox, then checks a
> > > > > checkbox to indicate 'create if not present'
>
> > > > > So - if I have a rule which says 'check for the existence (and
> > > > > writability) of the directory', and it finds that the directory isn't
> > > > > there, then we may need to give the user an error, OR we may not
> > > > > (depending on the 'create if not already there' checkbox).  That would
> > > > > be 1 rule, I guess.
>
> > > > > Next, if the directory doesn't exist, but we want to create it, we'll
> > > > > try to do that.  Which is a second rule.  There are a couple of
> > > > > different things that could go wrong, so I guess we'll use a semi-
> > > > > generic error message, and hope that's helpful enough :)
>
> > > > > This all gets further complicated by a desire to reuse this for
> > > > > several different fields - now I need to copy this set of validation
> > > > > rules into the second (and third, etc, etc) fields, too, which is
> > > > > getting kind of awkward.  It's not the end of the world, but having
> > > > > all the (related) logic in one function is kinda nice, and this way,
> > > > > that one function can produce exact error messages.
>
> > > > > Thanks!
> > > > > --Mike
>
> > > > > On Mar 7, 4:19 pm, "b logica" <[EMAIL PROTECTED]> wrote:
>
> > > > > > Why not just create a second validation method and narrow the first
> > > > > > one to whatever concerns the message you've set for it?
>
> > > > > > On Fri, Mar 7, 2008 at 6:46 PM, Mike <[EMAIL PROTECTED]> wrote:
>
> > > > > > >  Thanks for the reply!  One of the big reasons I went with Cake 
> > > > > > > is that
> > > > > > >  it seemed to have an active, friendly community.  I'm glad to be 
> > > > > > > part
> > > > > > >  of it! :)
>
> > > > > > >  I tried this out, and it doesn't seem to work.  Looking at the 
> > > > > > > code in
> > > > > > >  cake/libs/model/model.php, specifically the invalidFields 
> > > > > > > method, just
> > > > > > >  below where the call_user_func_array function is called, it 
> > > > > > > appears
> > > > > > >  that if the user-defined validation method (i.e., my method) 
> > > > > > > returns
> > > > > > >  false, then the Cake code will call Model::invalidate using the
> > > > > > >  default error message for that rule.
>
> > > > > > >  Since this happens after my method has finished executing, this 
> > > > > > > means
> > > > > > >  that the error message that my method set is now overwritten 
> > > > > > > with the
> > > > > > >  default 'message'.
>
> > > > > > >  As a matter of fact - looking at the code in the invalidFields, 
> > > > > > > it
> > > > > > >  looks like it's impossible to have a validation method create a
> > > > > > >  dynamic error message, given the code that's there, now.
>
> > > > > > >  Does anybody else have an interest in being able to create 
> > > > > > > dynamic
> > > > > > >  error messages from within a validation method/function?  If so, 
> > > > > > > how
> > > > > > >  do we ask for this feature to be incorporated into Cake?
>
> > > > > > >  Thanks!
> > > > > > >  --Mike
>
> > > > > > >  On Mar 7, 7:31 am, "dr. Hannibal Lecter" <[EMAIL PROTECTED]> 
> > > > > > > wrote:
> > > > > > >  > Have you tried Model::invalidate(...)?
>
> > > > > > >  
> > > > > > > >http://api.cakephp.org/1.2/class_model.html#81c94997c2d6158c40efd9c70...
>
> > > > > > >  > On Mar 6, 10:29 pm, Mike <[EMAIL PROTECTED]> wrote:
>
> > > > > > >  > > Hello!
>
> > > > > > >  > > In CakePHP 1.2, one can define a validation rule (in a 
> > > > > > > model) that
> > > > > > >  > > calls a method to do the validation.  If the method returns 
> > > > > > > false,
> > > > > > >  > > then whatever message was specified for that rule is 
> > > > > > > displayed in the
> > > > > > >  > > view, which is great for most of data validation needs.
>
> > > > > > >  > > However, in the case that the method returns false, I'd to 
> > > > > > > have that
> > > > > > >  > > method change the 'message' to be something new (which the 
> > > > > > > method just
> > > > > > >  > > generated).  It looks like I can do this by hacking the 
> > > > > > > cake/  file,
> > > > > > >  > > and by tweaking some code in the invalidFields method (right 
> > > > > > > around
> > > > > > >  > > the calls to call_user_func_array).
>
> > > > > > >  > > Is it possible to do this (to have the validation method 
> > > > > > > set/change
> > > > > > >  > > the message dynamically) without hacking Cake itself?  I'm 
> > > > > > > really
> > > > > > >  > > sorry if I've missed this, but I've looked around, but 
> > > > > > > haven't found
> > > > > > >  > > anything that seems directly applicable.
>
> > > > > > >  > > Thanks!
> > > > > > >  > > ---Mike- Hide quoted text -
>
> > > > > > >  > - Show quoted text -- Hide quoted text -
>
> > > > > > - Show quoted text -- Hide quoted text -
>
> > > > - Show quoted text -- Hide quoted text -
>
> > > - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to