function testBeforeAfterValidation() { $r = Request::create('/'); $f = new Form($r); $f->addInput('age'); $f->setBeforeValidation(function ($data, Form $form) { if (!empty($data['wrong'])) { $form->addError('Никогда не случится, т.к. поступают "чистые" данные'); } if ($data['age'] > 10) { $data['before'] = 1; $data['age'] += 10; } else { $form->addError('Возраст должен быть больше 10'); } return $data; }); $f->setAfterValidation(function ($data, Form $form) { if ($data['age'] > 100) { $data['after'] = 1; $data['age'] += 100; } else { $form->addError('Возраст должен быть больше 100'); } return $data; }); $this->assertFalse($f->validate(array('age' => 5, 'wrong' => 1)), 'Данные не проходят валидацию'); $this->assertEquals('Возраст должен быть больше 10, Возраст должен быть больше 100', $f->getErrors(', '), 'Ошибки'); $f->validate(array('age' => 123)); $exp = array('age' => 233, 'before' => 1, 'after' => 1); $this->assertEquals($exp, $f->getValues(), 'Фильтры до и после могут изменять итоговые данные'); }