/** * @param object $object * @param string $fieldName * @param BaseControl $control * @param IClassMetadata $classMetadata * @throws \NForms\Exceptions\UnexpectedTypeException * @return bool */ public function save($object, $fieldName, BaseControl $control, IClassMetadata $classMetadata) { if ($control->isOmitted() || $control->isDisabled()) { return TRUE; } $value = $control->getValue(); if ($classMetadata->hasAssociation($fieldName) && $value !== NULL) { if ($classMetadata->isSingleValuedAssociation($fieldName)) { $value = $this->objectManager->find($classMetadata->getAssociationTargetClass($fieldName), $value); } else { if (!is_array($value) && (!$value instanceof \ArrayAccess || !$value instanceof \Iterator)) { throw new UnexpectedTypeException("In mapping association {$classMetadata->getClass()}::\${$fieldName} - expected array or ArrayAccess and Iterator instance, given " . get_class($value) . "."); } $collection = array(); foreach ($value as $id) { $collection[] = $this->objectManager->find($classMetadata->getAssociationTargetClass($fieldName), $id); } $value = $collection; } } if ($classMetadata->hasAssociation($fieldName)) { $classMetadata->setAssociationValue($object, $fieldName, $value); } else { if ($control instanceof Nette\Forms\Controls\TextBase && $value === '') { $value = NULL; } $classMetadata->setFieldValue($object, $fieldName, $value); } return TRUE; }
/** * @return bool */ public function isDisabled() { return $this->wrappedControl->isDisabled(); }