PHPackages                             insolita/yii2-array-structure-validator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. insolita/yii2-array-structure-validator

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

insolita/yii2-array-structure-validator
=======================================

Validate array with complex structure

2.0.0(4y ago)1327.4k↓60%2[1 issues](https://github.com/Insolita/yii2-array-structure-validator/issues)2MITPHPPHP ^7.1|^8.0

Since Nov 24Pushed 4y ago3 watchersCompare

[ Source](https://github.com/Insolita/yii2-array-structure-validator)[ Packagist](https://packagist.org/packages/insolita/yii2-array-structure-validator)[ RSS](/packages/insolita-yii2-array-structure-validator/feed)WikiDiscussions master Synced today

READMEChangelog (1)Dependencies (3)Versions (4)Used By (2)

#### Yii2 validator for complex array structures

[](#yii2-validator-for-complex-array-structures)

[![yii2-array-structure-validator](https://github.com/Insolita/yii2-array-structure-validator/workflows/yii2-array-structure-validator/badge.svg?branch=master)](https://github.com/Insolita/yii2-array-structure-validator/workflows/yii2-array-structure-validator/badge.svg?branch=master)

Validator for array attributes, unlike builtin "each" validator, that support only one rule, this validator can

- validate multiple array attributes and even nested data structures
- All keys that should be present in array must be described, for optional keys default value should be set
- When input array not contains key defined in rules, this key added automatically with null value
- When input array contains key not defined in rules, "unexpected item" error will be defined

#### Installation

[](#installation)

`composer require insolita/yii2-array-structure-validator `

#### Usage

[](#usage)

For a simple array with known keys like `['id'=>1, 'name'=>'John Doe']`;

```
public function rules()
{
   return [
   //...
       ['simpleArray', ArrayStructureValidator::class,
          'rules'=>[
                 'id'=>[['required'], ['integer','min'=>0]],
                 'name'=>[['required'], ['string', 'max'=>100]],
                 'sex'=>[['default', 'value'=>'male'], ['in','range'=>['male','female']]
            ]]
       ],
   ];
}
```

For multidimensional arrays like ` [ ['id'=>1, 'name'=>'John Doe'], ['id'=>2, 'name'=>'Jane Doe','sex'=>'female'], ... ]`set each = true

```
public function rules()
{
   return [
   //...
       [['multiArray', 'some', 'attrs'], 'required'],
       ['multiArray', ArrayStructureValidator::class,
          'each'=>true,
           'rules'=>[
                 'id'=>[['required'], ['integer','min'=>0]],
                 'name'=>[['required'], ['string', 'max'=>100]],
                 'sex'=>[['default', 'value'=>'male'], ['in','range'=>['male','female']]
            ]]
       ]
   ];
}
```

For nested structures like

```
[
    'user'=>['id'=>1, 'name'=>'John Doe'],
    'coords'=>[['x'=>1, 'y'=>2],['x'=>3,'y'=>4]]
]

```

```
public function rules()
{
   return [
   //...
       ['complexArray', ArrayStructureValidator::class,
        'rules'=>[
                 'user'=>[[ArrayStructureValidator::class,
                       'rules'=>[
                           'id'=>[['required'], ['integer','min'=>0]],
                           'name'=>[['required'], ['string', 'max'=>100]],
                 ]]],
                 'coords'=>[[ArrayStructureValidator::class,
                      'each'=>true,
                      'rules'=>[
                            'x'=>[['required'], ['integer','min'=>0]],
                            'y'=>[['required'], ['integer','min'=>0]],
                 ], 'min'=>1, 'max'=>5]],
           ], 'min'=>2, 'max'=>2]
   ];
}
```

Model scenarios supported

```
public function rules()
{
   return [
   //...
        ['conditional', ArrayStructureValidator::class,
        'rules'=>[
                  'a'=>[['integer','min'=>0]], //will be checked on any scenario
                  'b'=>[
                          ['default', 'value'=>1, 'on'=>['create']],
                          ['integer', 'max'=>10, 'except'=>['create']],
                          ['required',  'on'=>['update']],
                          ['integer', 'max'=>1000, 'on'=>['update']],
                      ]
             ]
        ]
    ];
}
```

Closure and Inline validators supported, but with signature different from default

Inline method in model class

```
public function rules()
{
   return [
      ['array', ArrayStructureValidator::class,  'rules'=>[
             'item'=>[['required'], ['customValidator']]
      ]]
   ];
}

public function customValidator($attribute, $model, $index, $baseModel, $baseAttribute){
 /**
 * $model - Dynamic model with attributes equals value data, or value row, if used with each=>true
 * $attribute - current keyName
 * $index - current array index for multidimensional arrays, or null
 * $baseModel - instance of initial model, where validator was attached
 * $baseAttribute - name of initial attributed, where validator was attached

 * access to validated value - $model->$attribute
 * access to whole validated array  $baseModel->$baseAttribute
 * $model->addError($attribute, '[{index}][{attribute}] Error message', ['index'=>$index]);
*/
}
```

When conditions supported (But not whenClient!)

```
public function rules()
{
   return [
      ['conditional', ArrayStructureValidator::class,
          'rules'=>[
               'x'=>[['safe']],
               'y'=>[
                   ['default', 'value'=>1, 'when'=>fn(DynamicModel $model) => $model->x < 10],
                   [
                      'default',
                      'value'=>5,
                      'when'=>function($model, $attribute, $index, $baseModel, $baseAttribute){
                              return count($baseModel->$baseAttribute) > 5;
                         }],
                   ]
           ]]
   ];
}
```

#### Note:

[](#note)

Database related validators (exists, unique) not covered by tests yet and not supported

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance18

Infrequent updates — may be unmaintained

Popularity35

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~247 days

Total

2

Last Release

1801d ago

Major Versions

1.0.0 → 2.0.02021-07-29

PHP version history (2 changes)1.0.0PHP &gt;=7.1.0

2.0.0PHP ^7.1|^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/40f26825f8c130796e3151e6c076721cf5bb222c42148102bb31a341a1a5c789?d=identicon)[Insolita](/maintainers/Insolita)

---

Top Contributors

[![Insolita](https://avatars.githubusercontent.com/u/1847402?v=4)](https://github.com/Insolita "Insolita (16 commits)")

---

Tags

validatoryii2

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/insolita-yii2-array-structure-validator/health.svg)

```
[![Health](https://phpackages.com/badges/insolita-yii2-array-structure-validator/health.svg)](https://phpackages.com/packages/insolita-yii2-array-structure-validator)
```

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[paulzi/yii2-json-behavior

Yii2 json attribute behavior

75546.8k3](/packages/paulzi-yii2-json-behavior)[codeonyii/yii2-at-least-validator

Validates at least one (or more) attributes.

28263.7k1](/packages/codeonyii-yii2-at-least-validator)[arogachev/yii2-many-to-many

Many-to-many ActiveRecord relation for Yii 2 framework

3643.1k4](/packages/arogachev-yii2-many-to-many)[dstotijn/yii2-json-schema-validator

A Yii2 extension that provides a validator class for JSON Schema validation.

1730.9k](/packages/dstotijn-yii2-json-schema-validator)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
