user6972
user6972

Reputation: 911

cakephp form validation for counting multiple textareas as a group

Is it possible to validate a group of form textareas at once? I would like to check that at least 5 out of 15 text areas are notEmpty. Any suggestions on a method for doing this?

If you're going to down vote, explain why.

I've read http://book.cakephp.org/view/150/Custom-Validation-Rules#Adding-your-own-Validation-Methods-152 but it isn't clear to me how I would group multiple field items together and only check for a minimum of 5 notEmpty cases.

Edit: I'm using version 2.3.7

I don't really have any code to show because I'm just trying to do a data validation on a form with many textareas. My form isn't working right now due to other issues. If this was the only problem I could post all the code, but right now it would just confuse matters. I'm looking for a descriptive answer of how to validate a group of fields together.

Upvotes: 1

Views: 286

Answers (1)

AD7six
AD7six

Reputation: 66217

Attach the validation rule to one textarea

You can do this by attaching the validation rule to any one of the text areas e.g.

class Foo extends AppModel {

    public $validate = array(
        'textarea_1' => array(
            'atLeast5' => array(
                'rule' => array('validate5Textareas'),
                'message' => 'Please put text in at least 5 of the little boxes'
            )
        )
    );

    public function validate5Textareas() {
        $filledTextAreas = 0;

        // adapt this to match the names/logic of the real form
        for ($i = 1; $i <= 15; $i++) {
            if (!empty($this->data[$this->alias]['textarea_' . $i])) {
                $filledTextAreas++;
            }
        }

        return $filledTextAreas >= 5;
    }

}

The $validate array defines a rule such that validate5Textareas is called if textarea_1 is in the data passed to save.

The function validate5Textareas will return true if 5 or more have text in them and false otherwise.

Upvotes: 2

Related Questions