Thanks again :) I'm still having a few problems, the ErrorHelper provided uses a method of the HTML Helper which doesn't appear to exist - it outputs by using $html->contentTag(), which doesn't work. I've looked through the HTML Helper itself and it seems to be using output in the format of $this->output($this->tags['fieldset'], $data1, $data2); etc...
Unfortunately the <li> tag which I need for displaying the error messages is not in the var $tags array. I know I could modify the ErrorHelper's output to put out straight HTML, which would work, but is there a real Cake-y way to do this? On Feb 8, 10:23 am, "mcgordon" <[EMAIL PROTECTED]> wrote: > The problem is in the class name "Validation" which is the same as the > core class name. If you rename it the conflict goes away. > > You've got to change two things in the code, first the name of the > class in the class definition (file validation.php). The author's > name is Evan so I renamed his class eValidation: > > "class eValidation" on line 26 of Validation.php > > Don't forget to rename the constructor on line 45: > > function eValidation(&$data, &$model) > > Next you have to change the name of the class where it gets > instantiated. In app_model.php look for the function invalid_fields > that you added and change this line to include your new class name: > > $validation =& new eValidation($data, $this); > > it should work now. > > While we're at it, the other bugs I was talking about occur when the > code passes the field to be validated through the _evaluate function > twice. Look at this function below: > > function validatePattern($fieldName, $params) > { > $pattern = $params['pattern']; > return $this->_evaluate(preg_match($pattern, $this->data[$this->name] > [$fieldName]), > "does not match pattern {$pattern}", $fieldName, > $params); > > } > > it validates the field against a user-supplied pattern and sends the > result to the _evaluate function where the model->validationErrors are > set. Good so far. > > The following function is a convenience function so that you don't > have to remember the regex for a valid word: > > function validateWord($fieldName, $params) > { > $params['pattern'] = '/^\\w*$/'; > return $this->_evaluate(!$this->validatePattern($fieldName, $params), > "is not a valid word", $fieldName, $params); > > } > > it first runs the field through validatePattern() [which in turn runs > it through _evaluate()] and then sends the inverse of the result > through _evaluate again, resulting in the opposite answer to what > you'd expect. > > If we follow the logic, for a given field containing valid data, > validateWord() calls validatePattern() which calles _evaluate() with > "true" as the first parameter (the regex matched for valid data). > _evaluate() in turn returns true and so validatePattern() also returns > true. > > now we run _evaluate again with (!true) as the first parameter. this > time _evaluate() fails and the error message is set, even though the > field is valid. the problem is with the ! symbol that negates the > first return value. By simply removing the ! the function returns true > as expected and the field validates. > > This is true throughout the code wherever a convenience function is > used to alias a more general function. The second time through > _evaluate() - which is done to allow for custom error messages - the > validation fails. > > The following functions need to be changed: > validateRequired > validateWord > validateInteger > validateNumber > validateEmail > validateYear > > > I was almost tempted to > > simply delete the standard Validation class and overwrite it with this > > one, but that would cause other problems down the road, I'm sure. > > Bad Idea Jeans™ ;) > > Don't touch the core code unless you're using some kind of versioning > system that will let you merge in the latest updates or you'll never > remember all the places where you made changes. That goes double for > now as they're adding new stuff to the trunk every day. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Cake PHP" group. To post to this group, send email to cake-php@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---