コード例 #1
0
 /**
  * @param string|object $object Class name or object instance
  *
  * @return ObjectValidator
  */
 public function getObjectValidator($object)
 {
     $validator = new ObjectValidator();
     $classComment = $this->annotationReader->readClass($object);
     foreach ($classComment->getAnnotations() as $class => $annotations) {
         foreach ($annotations as $annotation) {
             if ($annotation instanceof Rule) {
                 $validator->addRule($annotation);
             }
         }
     }
     $methods = $this->annotationReader->readMethods($object);
     foreach ($methods as $methodName => $comment) {
         /** @var Comment $comment */
         foreach ($comment->getAnnotations() as $class => $annotations) {
             foreach ($annotations as $annotation) {
                 if ($annotation instanceof Rule) {
                     $validator->addMethodRule($methodName, $annotation);
                 }
             }
         }
     }
     $properties = $this->annotationReader->readProperties($object);
     foreach ($properties as $propertyName => $comment) {
         /** @var Comment $comment */
         foreach ($comment->getAnnotations() as $class => $annotations) {
             foreach ($annotations as $annotation) {
                 if ($annotation instanceof Rule) {
                     $validator->addPropertyRule($propertyName, $annotation);
                 }
             }
         }
     }
     return $validator;
 }
コード例 #2
0
ファイル: ValidatorTest.php プロジェクト: bugadani/validatiny
 public function testThatValidatorCallsRulesForScenario()
 {
     $std = new \stdClass();
     $std->prop = "foo";
     $std->other = "foo";
     $mockReader = $this->getMock(RuleReader::class, ['getObjectValidator']);
     $validator = new Validator($mockReader);
     $objectValidator = new ObjectValidator();
     $stringRule = new StringRule();
     $numberRule = new Number();
     $booleanRule = new BooleanRule();
     $stringRule->setScenario('string');
     $numberRule->setScenario('number');
     $objectValidator->addPropertyRule('prop', $stringRule);
     $objectValidator->addPropertyRule('prop', $numberRule);
     $mockReader->expects($this->any())->method('getObjectValidator')->with($this->equalTo($std))->will($this->returnValue($objectValidator));
     $this->assertFalse($validator->validate($std, "number"));
     $this->assertTrue($validator->validate($std, "string"));
     $booleanRule->setScenario(['string', 'number']);
     $objectValidator->addPropertyRule('other', $booleanRule);
     $this->assertFalse($validator->validate($std, "string"));
 }