/** * @param Field $field * @throws ConfigException */ protected function setDefaultOptions(Field $field) { $options = $field->getOptions(); $defaultOptions = $this->provideDefaultOptions(); $requiredOptions = $this->provideRequiredOptions(); $requiredOptions = array_combine($requiredOptions, $requiredOptions); $resultOptions = array_merge($defaultOptions, $options); $unexistedOptions = array_diff_key($requiredOptions, $resultOptions); if (count($unexistedOptions)) { throw new ConfigException(sprintf('Field \'%s\' (with type \'%s\') must contain required options: \'%s\'.', $field->getName(), $field->getType(), implode('\', \'', $unexistedOptions))); } $field->setOptions($resultOptions); }
/** * @param Field $field * @param DataObjectInterface $object * @throws ConfigException */ public function handleField(Field $field, DataObjectInterface $object) { if (!$field->getValue()) { return; } $this->setDefaultOptions($field); $options = $field->getOptions(); /** @var ObjectManager $objectManager */ $objectManager = $options['em']; $class = $options['class']; if (!($repo = $objectManager->getRepository($class))) { throw new ConfigException(sprintf('Repository for class \'%s\' doesn\'t exist.', $class)); } $property = $options['property']; $criteria = array($property => $field->getValue()); $entity = $repo->findOneBy($criteria); $field->setValue($entity); }