public function loadClassMetadata(ClassMetadata $metadata) { /** @var \ReflectionClass $refClass */ $refClass = $metadata->getReflectionClass(); $baseClass = $this->classNameProvider->getBaseClass($refClass->name); if (!$baseClass) { return false; } if (!array_key_exists($baseClass, $this->config->models)) { return false; } foreach ($this->config->models[$baseClass]->properties as $propName => $property) { if ($property->validation) { if (!is_array($property->validation)) { throw new \LogicException("Configuration error: {$baseClass}:{$propName}:validation must be array"); } foreach ($property->validation as $index => $rule) { if (!is_array($rule) or count($rule) != 1) { throw new \LogicException("Configuration error: {$baseClass}:{$propName}:validation: rule #{$index} must be array of 1 element which contains array"); } $constraintClass = array_keys($rule)[0]; $constraintOptions = $rule[$constraintClass]; $fullClass = $this->getFullConstraintClass($constraintClass); $metadata->addGetterConstraint($propName, new $fullClass($constraintOptions)); } } } return true; }
public function testCommonNamespace() { $provider = new ClassNameProvider('Grace\\Tests\\ORM\\Plug'); $this->assertEquals('TaxiPassenger', $provider->getBaseClass('TaxiPassenger')); $this->assertEquals('TaxiPassenger', $provider->getBaseClass('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger')); $this->assertEquals('TaxiPassenger', $provider->getBaseClass('Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger')); $this->assertEquals('TaxiPassenger', $provider->getBaseClass('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder')); $this->assertEquals('TaxiPassenger', $provider->getBaseClass('Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger', $provider->getModelClass('TaxiPassenger')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger', $provider->getModelClass('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger', $provider->getModelClass('Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger', $provider->getModelClass('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger', $provider->getModelClass('Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder', $provider->getFinderClass('TaxiPassenger')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder', $provider->getFinderClass('\\Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder', $provider->getFinderClass('Grace\\Tests\\ORM\\Plug\\Model\\TaxiPassenger')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder', $provider->getFinderClass('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder')); $this->assertEquals('\\Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder', $provider->getFinderClass('Grace\\Tests\\ORM\\Plug\\Finder\\TaxiPassengerFinder')); }