2

I want to validate a form field for URL. I have set the default for the field to http://. When the user doesn't enter a URL, and leaves the http://, it says invalid URL. URL is not required, so if it's only http://, it should not show error message. How can I make it ignore if the person submits http:// as the URL?

Thanks

tereško
  • 58,060
  • 25
  • 98
  • 150
codemonkey613
  • 960
  • 1
  • 16
  • 26

1 Answers1

3

http:// is not a valid url, so if you want to allow it anyway there are 2 options

  1. create a custom validation rule, that returns true for a real url + http://
  2. use the before validate callback and set the url field to blank if it is just http://

hope that helps

EDIT

I forgot: you don't need to set required but 'allowEmpty' => true

required -> the form must contain a field xyz that is send to the server

allowEmpty-> a field may be blank


I added the link to the callback function above, but anyway .. here it is:

in your model class (I just suppose it's User):

class User extends AppModel {
    ..

    function beforeValidate() {
        if (isset($this->data['User']['url']) && $this->data['User']['url'] == 'http://') {
            $this->data['User']['url'] = '';
        }
        return true;
    }
    ..
}

harpax
  • 5,986
  • 5
  • 35
  • 49
  • How do I use beforeValidate()? I can't find any examples. Is it a function? How do I pull the submitted variables up: $data['SubmitedForm']['URL']? Thanks – codemonkey613 Jan 24 '11 at 16:26
  • 1
    try to use $this->data[$this->alias][...] because the name of the class can change... – mark Jan 24 '11 at 23:24