Esempio n. 1
0
 /**
  * Replace form control with new rules
  *
  * @param BuilderDefinition $definition
  */
 private function replaceFormControl(BuilderDefinition $definition)
 {
     $form = $this->form;
     if (isset($form[$definition->getName()])) {
         unset($form[$definition->getName()]);
     }
     $methodName = 'add' . ucfirst($definition->getComponentType());
     /** @var BaseControl $control */
     $control = Callback::invokeArgs(array($form, $methodName), [$definition->getName(), $definition->getLabel()]);
     // is required?
     if ($definition->isRequired()) {
         $control->addRule(Form::FILLED, sprintf('%s is required!', $definition->getLabel() === NULL ? $definition->getName() : $definition->getLabel()));
     }
     // rules conditions - validation rules
     foreach ($definition->getValidationRules() as $validationRule) {
         if ($validationRule['conditional']) {
             $control->addCondition(Form::FILLED)->addRule($validationRule['validator'], $validationRule['text'], $validationRule['arg']);
         } else {
             $control->addRule($validationRule['validator'], $validationRule['text'], $validationRule['arg']);
         }
     }
     // placeholder
     if ($definition->getPlaceholder() !== NULL) {
         $control->setAttribute('placeholder', $definition->getPlaceholder());
     }
     if (in_array($definition->getComponentType(), [BuilderDefinition::COMPONENT_TYPE_CHECKBOX_LIST, BuilderDefinition::COMPONENT_TYPE_SELECT, BuilderDefinition::COMPONENT_TYPE_RADIO_LIST, BuilderDefinition::COMPONENT_TYPE_MULTI_SELECT])) {
         /** @var ChoiceControl $control */
         if (count($definition->getValues()) > 0) {
             $control->setItems($definition->getValues());
         }
     }
     // set value - or load it from entity
     if ($definition->getValue() !== NULL) {
         $control->setValue($definition->getValue());
     } else {
         $this->entityFormMapper->mapValueToComponent($this->entity, $control);
     }
 }