public function process(FormRuleProcessorContext $context, FormRuleContextBuilder $formRuleContext) { $form = $context->getForm(); $formConfig = $form->getConfig(); if (!$formConfig->getCompound()) { return; } /** @var \Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer $transformer */ $transformer = $this->findTransformer($formConfig, 'Symfony\\Component\\Form\\Extension\\Core\\DataTransformer\\DateTimeToArrayTransformer'); if ($transformer === null) { return; } $view = $context->getView(); $fields = $this->getTransformerFields($transformer); $invalidMessage = $this->getFormRuleMessage($formConfig); $views = array(); $conditions = array(); foreach ($fields as $fieldName) { $childView = $view->children[$fieldName]; // Get child rules collection $childRules = $formRuleContext->get($childView); if ($childRules === null) { $formRuleContext->add($childView, new RuleCollection()); $childRules = $formRuleContext->get($childView); } // Register rules $this->addNumberCheck($childView, $childRules, $invalidMessage, $conditions); $views[] = FormHelper::getFormName($childView); $conditions[] = new FieldDependency($childView); } if ($this->useGroupRule && count($views) > 1) { $rules = $formRuleContext->get(array_shift($views)); $rules->set(CompoundCopyToChildPass::RULE_NAME_GROUP_REQUIRED, new TransformerRule(CompoundCopyToChildPass::RULE_NAME_GROUP_REQUIRED, $views, $invalidMessage)); } }
public function process(FormRuleProcessorContext $context, FormRuleContextBuilder $collection) { $form = $context->getForm(); $formConfig = $form->getConfig(); if (!$formConfig->getCompound()) { return; } $transformer = $this->findTransformer($formConfig, 'Symfony\\Component\\Form\\Extension\\Core\\DataTransformer\\ValueToDuplicatesTransformer'); if ($transformer === null) { return; } $keys = $this->getKeys($transformer); if (empty($keys)) { return; } $formView = $context->getView(); // Use children here since we need the full_name $primary = array_shift($keys); $primaryView = $formView->children[$primary]; // Copy all rules to the first child/key element $ruleCollection = $collection->get($formView); if (!empty($ruleCollection)) { $collection->add($primaryView, $ruleCollection); } $collection->remove($formView); // Get correct error message if one is set. $invalidMessage = $this->getFormRuleMessage($formConfig); // Create equalTo rules for all other fields $equalToPrimaryRule = new TransformerRule('equalTo', FormHelper::generateCssSelector($primaryView), $invalidMessage, array(new FieldDependency($primaryView))); foreach ($keys as $childName) { $childCollection = new RuleCollection(); $childCollection->set('equalTo', $equalToPrimaryRule); $collection->add($formView->children[$childName], $childCollection); } }
public function process(FormRuleProcessorContext $context, FormRuleContextBuilder $formRuleContext) { $form = $context->getForm(); $formConfig = $form->getConfig(); if (!$formConfig->getCompound() || $context->getConstraints()->count() === 0) { return; } $formView = $context->getView(); $rules = $formRuleContext->get($formView); if ($rules === null || $rules->count() === 0 || !$this->requiresCopy($form)) { return; } $this->registerRulesForChildren($formRuleContext, $formView, $this->getFormRuleMessage($formConfig)); }
public function process(FormRuleProcessorContext $processContext, FormRuleContextBuilder $formRuleContext) { $form = $processContext->getForm(); if (!$this->requiresValidConstraint($form) || $this->hasValidConstraint($processContext->getConstraints())) { return; } $view = $processContext->getView(); $it = new \RecursiveIteratorIterator(new FormViewRecursiveIterator($view->getIterator()), \RecursiveIteratorIterator::SELF_FIRST); foreach ($it as $childView) { if (isset($childView->vars['required'])) { $childView->vars['required'] = false; } $this->cleanChildRules($childView, $formRuleContext); } }
public function process(FormRuleProcessorContext $processContext, FormRuleContextBuilder $formRuleContext) { $constraints = $processContext->getConstraints(); $form = $processContext->getForm(); $collection = new RuleCollection(); foreach ($this->mappers as $mapper) { foreach ($constraints as $constraint) { if (!$mapper->supports($constraint, $form)) { continue; } $mapper->resolve($constraint, $form, $collection); } } $formRuleContext->add($processContext->getView(), $collection); }
public function process(FormRuleProcessorContext $processContext, FormRuleContextBuilder $formRuleContext) { $view = $processContext->getView(); if (!isset($view->vars['required'])) { return; } // Check if the field is really required according to HTML validation // (aka the required for symfony form means it needs to be submitted but maybe null or "") $constraints = $processContext->getConstraints(); foreach ($constraints as $constraint) { if (in_array(get_class($constraint), static::$requiredConstraintClasses, true)) { $view->vars['required'] = true; return; } } $view->vars['required'] = false; }
public function process(FormRuleProcessorContext $processContext, FormRuleContextBuilder $formRuleContext) { $form = $processContext->getForm(); $view = $processContext->getView(); // Check if this is a a prototype/collection type /** @var FormInterface|null $prototype */ $prototype = $form->getConfig()->getAttribute('prototype'); if (!$prototype || !isset($view->vars['prototype'])) { return; } /** @var FormView $prototypeView */ $prototypeView = $view->vars['prototype']; // Extract the prototype rules from the default rules $prototypeContext = $this->extractRules($formRuleContext, $prototype, $prototypeView); if (count($prototypeContext->all()) === 0) { return; } // Register builder $view->vars['rule_builder'] = $prototypeContext; }
public function process(FormRuleProcessorContext $context, FormRuleContextBuilder $formRuleContext) { $form = $context->getForm(); $formConfig = $form->getConfig(); if ($formConfig->getCompound()) { return; } if ($this->findTransformer($formConfig, 'Symfony\\Component\\Form\\Extension\\Core\\DataTransformer\\DateTimeToStringTransformer') === null && $this->findTransformer($formConfig, 'Symfony\\Component\\Form\\Extension\\Core\\DataTransformer\\DateTimeToRfc3339Transformer') === null) { return; } $formView = $context->getView(); $formTypeClass = get_class($formConfig->getType()->getInnerType()); switch ($formTypeClass) { case 'Symfony\\Component\\Form\\Extension\\Core\\Type\\TimeType': $this->processTime($formView, $formConfig, $formRuleContext); return; case 'Symfony\\Component\\Form\\Extension\\Core\\Type\\DateType': $this->processDate($formView, $formConfig, $formRuleContext); return; case 'Symfony\\Component\\Form\\Extension\\Core\\Type\\DateTimeType': $this->processDateTime($formView, $formConfig, $formRuleContext); return; } }