public function testDimensions() { $input = array('name' => 'This is my name', 'user' => array('id' => 1, 'name' => 'Thijs')); $validator = new Validator(); $model = new Model('testModel'); $validator->addModel($model); $property = new Property('name'); $property->addRequirement(new IsType('string')); $model->addProperty($property); // Submodel $userModel = new Model('user'); $property = new Property('id'); $property->addRequirement(new IsType('numeric')); $userModel->addProperty($property); $property = new Property('name'); $property->addRequirement(new IsType('string')); $userModel->addProperty($property); $property = new ModelProperty($userModel); $property->addRequirement(new Exists()); $model->addProperty($property); $this->assertEquals(true, $validator->validate('testModel', $input)); }
/** * @param $name * @param $property * @return Property */ private function getPropertyFromInput($name, $property) { // Is this property an ArrayProperty? if (substr($name, -2) === '[]' || substr($name, -3) === '[]?') { return $this->getArrayPropertyFromInput($name, $property); } else { if (is_array($property)) { // If plain array, (not assoc), this is a list of filters( if (isset($property[0])) { // Property name is numeric; this is a filter. // Make a property and continue. return Property::make($name, $property); } else { // Is this model optional or required? $required = true; if (substr($name, -1) === '?') { $name = substr($name, 0, -1); $required = false; } // Create a model property (with a nice prefix) $prefix = $this->getPrefix() . $name . '.'; // Make the model $model = self::make($name, $property, $prefix); // Make the model property $prop = new ModelProperty($model); // Remember when we checked for the "?" if ($required) { $prop->addRequirement(new Exists()); } // Return the model property return $prop; } } else { return Property::make($name, $property); } } }