# Conditional validation

**URL:** <https://discourse.cakephp.org/t/conditional-validation/1955>\
**Category:** Uncategorized\
**Created:** [January 30, 2017, 6:42pm UTC](https://discourse.cakephp.org/t/conditional-validation/1955 "2017-01-30T18:42:05Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Klaus](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.cakephp.org/klaus/32/269_2.png) [@Klaus](https://discourse.cakephp.org/u/Klaus)\
**Post date:** [January 30, 2017, 6:42pm UTC](https://discourse.cakephp.org/t/conditional-validation/1955/1 "2017-01-30T18:42:05Z")

</div>

Hi, in my Model I need a conditional validation. Now I use the following:

```
     $validator
      ->requirePresence('iban', 'create', 'update')
      ->notEmpty('iban')
      ->add('iban', [
      'length' => [
      'rule' => ['minlength', 22],
      'message' => 'Die IBAN muss 22 Zeichen lang sein!',
      ]]
      );

```

The iban needs to be 22 characters. But now I have add the condition:  
Only if field ‘payer’ is set to 1, which is the field before iban.

I have tried this:  
$validator-\>allowEmpty(‘iban’, function ($context) {  
return $context[‘data’][‘payer’] === 0;  
});

and receive an error: Undefinde index payer

How do I proceed?

---

<div class="post-metadata">

**Author:** ![Graziel](https://avatars.discourse-cdn.com/v4/letter/g/71c47a/32.png) [@Graziel](https://discourse.cakephp.org/u/Graziel)\
**Post date:** [January 30, 2017, 7:14pm UTC](https://discourse.cakephp.org/t/conditional-validation/1955/2 "2017-01-30T19:14:41Z")

</div>

in `$context['data']` are only data you pass to validation i.e. when you do `$this->patchEntity($user, $this->request->data)` only `$this->request->data` is there. If you need to pass also original object data you can pass it as provider:

[https://book.cakephp.org/3.0/en/core-libraries/validation.html#custom-validation-rules](https://book.cakephp.org/3.0/en/core-libraries/validation.html#custom-validation-rules)

---

<div class="post-metadata">

**Author:** ![rrd](https://yyz1.discourse-cdn.com/flex029/user_avatar/discourse.cakephp.org/rrd/32/113_2.png) [@rrd](https://discourse.cakephp.org/u/rrd)\
**Post date:** [January 31, 2017, 12:12pm UTC](https://discourse.cakephp.org/t/conditional-validation/1955/3 "2017-01-31T12:12:21Z")

</div>

See this: [Conditional application rules](http://discourse.cakephp.org/t/conditional-application-rules/1606/4)

---

<div class="post-metadata">

**Author:** ![Ruslan](https://avatars.discourse-cdn.com/v4/letter/r/2bfe46/32.png) [@Ruslan](https://discourse.cakephp.org/u/Ruslan)\
**Post date:** [February 4, 2017, 7:58am UTC](https://discourse.cakephp.org/t/conditional-validation/1955/4 "2017-02-04T07:58:15Z")

</div>

If you have not many statuses for player (0 or 1)  
You can make it easy:  
if ($this-\>request-\>data[‘ControllerName’]['player] != 1) {  
$this-\>ControllerName-\>validator()-\>remove(‘validationRuleName’);  
}
