Example #1
0
 public function testIfWillValidateModelUsingCustomValidator()
 {
     $model = new ModelWithCustomValidatorProxy();
     $validator = new Validator($model);
     $result = $validator->validate();
     // Should not pass validation
     $this->assertFalse($result);
     // Should pass validation
     $model->login = '******';
     $result2 = $validator->validate();
     $this->assertTrue($result2);
     // Get validators meta
     $validatorsMeta = ManganMeta::create($model)->login->validators;
     // should have one
     $this->assertSame(1, count($validatorsMeta));
     $validatorInstance = Factory::create($model, $validatorsMeta[0]);
     // Check type of validator
     $this->assertInstanceof(RequiredValidator::class, $validatorInstance);
 }
Example #2
0
 private function validateEntity($name, $validators)
 {
     $valid = [];
     foreach ($validators as $validatorMeta) {
         // Filter out validators based on scenarios
         if (!empty($validatorMeta->on)) {
             $on = (array) $validatorMeta->on;
             $enabled = false;
             foreach ($on as $scenario) {
                 if ($scenario === ScenarioManager::getScenario($this->model)) {
                     $enabled = true;
                     break;
                 }
             }
             if (!$enabled) {
                 continue;
             }
         }
         if (!empty($validatorMeta->except)) {
             $except = (array) $validatorMeta->except;
             $enabled = true;
             foreach ($except as $scenario) {
                 if ($scenario === ScenarioManager::getScenario($this->model)) {
                     $enabled = false;
                     break;
                 }
             }
             if (!$enabled) {
                 continue;
             }
         }
         // Create validator and validate
         $validator = Factory::create($this->model, $validatorMeta, $name);
         if ($validator->isValid($this->model, $name)) {
             $valid[] = true;
         } else {
             $valid[] = false;
             $this->errors[$name] = array_merge($this->errors[$name], $validator->getErrors());
             // Set errors to model instance if it implements ValidatableInterface
             if ($this->model instanceof ValidatableInterface) {
                 $this->model->setErrors($this->errors);
             }
         }
     }
     return count($valid) === array_sum($valid);
 }