Lukas Chojnacki
Lukas Chojnacki

Reputation: 105

Validation defined in model - CakePHP

Using CakePHP 1.3 I developed engine for blog with posts and comments tables and recently I have noticed that in database I've got records with null values in content column despite of the fact that Comment model has defined proper validation:



    <?php
    class Comment extends AppModel {
        var $name = 'Comment';
        var $sequence = 'comments_seq';

        var $belongsTo = array(
            'Post' => array(
                'className'  => 'Post',
                'foreignKey' => 'post_id'
            )
        );

        var $validate = array(
            'content' => array(
                'required' => array (
                        'rule' => 'notEmpty',
                        'message' => 'Content can't be empty.'
                )
            ),
            'post_id' => array(
                'rule' => 'notEmpty'
            ),
            'created' => array(
                'rule' => 'notEmpty'
            )
        );
    ?>

Is there a bug in CakePHP framework or validation defined above is not correct or insufficient?

Upvotes: 0

Views: 260

Answers (1)

jeremyharris
jeremyharris

Reputation: 7882

In your validation rules, you're not actually requiring the field. Requiring means that the key must exist when it comes time to validate. The notEmpty rule requires only that the key is not empty but not that it exists.

To require that the field exists, use the required option in your validation rules:

var $validate = array(
  'content' => array(
    'required' => array ( // here, 'required' is the name of the validation rule
      'rule' => 'notEmpty',
      'message' => 'Content can\'t be empty.',
      'required' => true // here, we say that the field 'content' must 
                         // exist when validating
    )
  ),
  'post_id' => array(
     'rule' => 'notEmpty'
   ),
   'created' => array(
     'rule' => 'notEmpty'
   )
);

Without the required key, you could potentially save completely empty records by simply not including the 'content' key when saving. Now that it is required, validation will fail if 'content' is not in the data that you're saving.

Upvotes: 2

Related Questions