public function __construct(FormConfigInterface $config) { if ($config->getCompound() && !$config->getDataMapper()) { throw new LogicException('Compound forms need a data mapper'); } if ($config->getInheritData()) { $this->defaultDataSet = true; } $this->config = $config; $this->children = new OrderedHashMap(); }
/** * Transforms the value if a value transformer is set. * * @param mixed $value The value to transform * * @return mixed */ private function normToView($value) { // Scalar values should be converted to strings to // facilitate differentiation between empty ("") and zero (0). // Only do this for simple forms, as the resulting value in // compound forms is passed to the data mapper and thus should // not be converted to a string before. if (!$this->config->getViewTransformers() && !$this->config->getCompound()) { return null === $value || is_scalar($value) ? (string) $value : $value; } foreach ($this->config->getViewTransformers() as $transformer) { $value = $transformer->transform($value); } return $value; }
/** * {@inheritdoc} */ public function add(FormInterface $child) { if ($this->bound) { throw new AlreadyBoundException('You cannot add children to a bound form'); } if (!$this->config->getCompound()) { throw new FormException('You cannot add children to a simple form. Maybe you should set the option "compound" to true?'); } $this->children[$child->getName()] = $child; $child->setParent($this); if ($this->config->getDataMapper()) { $this->config->getDataMapper()->mapDataToForms($this->getViewData(), array($child)); } return $this; }
/** * Transforms the value if a value transformer is set. * * @param mixed $value The value to transform * * @return mixed * * @throws TransformationFailedException If the value cannot be transformed to "view" format */ private function normToView($value) { // Scalar values should be converted to strings to // facilitate differentiation between empty ("") and zero (0). // Only do this for simple forms, as the resulting value in // compound forms is passed to the data mapper and thus should // not be converted to a string before. if (!$this->config->getViewTransformers() && !$this->config->getCompound()) { return null === $value || is_scalar($value) ? (string) $value : $value; } try { foreach ($this->config->getViewTransformers() as $transformer) { $value = $transformer->transform($value); } } catch (TransformationFailedException $exception) { throw new TransformationFailedException('Unable to transform value for property path "' . $this->getPropertyPath() . '": ' . $exception->getMessage(), $exception->getCode(), $exception); } return $value; }
/** * Creates an unmodifiable copy of a given configuration. * * @param FormConfigInterface $config The configuration to copy. */ public function __construct(FormConfigInterface $config) { $dispatcher = $config->getEventDispatcher(); if (!$dispatcher instanceof UnmodifiableEventDispatcher) { $dispatcher = new UnmodifiableEventDispatcher($dispatcher); } $this->dispatcher = $dispatcher; $this->name = $config->getName(); $this->propertyPath = $config->getPropertyPath(); $this->mapped = $config->getMapped(); $this->byReference = $config->getByReference(); $this->virtual = $config->getVirtual(); $this->compound = $config->getCompound(); $this->types = $config->getTypes(); $this->viewTransformers = $config->getViewTransformers(); $this->modelTransformers = $config->getModelTransformers(); $this->dataMapper = $config->getDataMapper(); $this->validators = $config->getValidators(); $this->required = $config->getRequired(); $this->disabled = $config->getDisabled(); $this->errorBubbling = $config->getErrorBubbling(); $this->emptyData = $config->getEmptyData(); $this->attributes = $config->getAttributes(); $this->data = $config->getData(); $this->dataClass = $config->getDataClass(); $this->options = $config->getOptions(); }