4

I updated some data by inserting it into the fields and clicking on the update button, but validates() is always returning false. All the fields are filled correctly, and it does not display any error messages - validates() just returns false. Why?

$this->Post->set($this->data);
if ($this->Post->validates())
    echo 'ok';
else
    echo 'error';
3
  • 1
    First of all, the syntax is incorrect, there's an opening { but no closing }. Secondly, try debug($this->Post->invalidFields()) to see which fields failed. Commented Jan 14, 2011 at 8:37
  • Thanks. I have 8 fields in database, but wish update only 4. Why cake validate all 8 fields? Commented Jan 14, 2011 at 8:56
  • 1
    post your model's validation rules & $data array Commented Jan 14, 2011 at 15:34

1 Answer 1

5

Check this post for some tips. The relevant ones are given here.

  1. Save() does not work! Sometimes it happens that save() fails without any obvious reason. Your data array looks fine and you’ve built the form correctly, etc., etc., but no query was executed. It is very possible that save had failed due to validation errors. Maybe you are updating some model and, while the current fields in the form pass the validation, there is a chance that some “other ones” are causing the validation rules to fail. An easy (and helpful) way to see what’s going on with validation is to do pr($this->validationErrors); in your view. By employing this method you’ll see exactly what’s happening with your model’s validation. The other option is to pass false as a second parameter to save(); in order to disable the validation. However, the latter method does not give much of a hint and should not be used to fix a failing problem, but rather to purposely avoid validation.

  2. Save() still does not work! Do you have beforeSave(); in your model or app model? Always double-check for this method, and even more importantly, ensure that it returns true.

  3. Validating on create or update CakePHP has an 'on' key to be used in your $validate array. It allows you to specify whether the rule should be enforced during a new record creation or during an update of an existing record. For example, if you only want to check for a unique email address when you are creating a new User account, you would add 'on' => 'create' to your $validate array. Therefore, this rule will be ignored when you are updating/editing some user.

Sign up to request clarification or add additional context in comments.

1 Comment

I think you need pr($this->Post->validationErrors);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.