/** * @param FormRuleContextBuilder $context */ public function compile(FormRuleContextBuilder $context) { $it = new \RecursiveIteratorIterator(new \RecursiveArrayIterator($context->getGroups())); $groups = array_unique(array_filter(iterator_to_array($it, false))); /** @var RuleCollection $ruleCollection */ foreach ($context->all() as $ruleCollection) { foreach ($ruleCollection as $name => $rule) { if (!$rule instanceof ConstraintRule) { continue; } $rule->groups = array_intersect($rule->groups, $groups); if (empty($rule->groups)) { $ruleCollection->remove($name); } } } }
/** * @param FormRuleContextBuilder $context */ public function compile(FormRuleContextBuilder $context) { $formGroups = $context->getGroups(); foreach ($formGroups as $name => $groups) { if ($groups !== null) { continue; } // Find the closest validation group $path = new PropertyPath($name); do { $parentName = (string) $path; if (isset($formGroups[$parentName]) && ($groups = $formGroups[$parentName]) !== null) { $context->addGroup($name, $groups); break; } $path = $path->getParent(); } while ($path !== null); } }
protected function compileChildContexts(FormView $rootView, FormRuleContextBuilder $rootRuleBuilder) { $children = $rootView->vars['rule_builder_children']; unset($rootView->vars['rule_builder_children']); foreach ($children as $child) { /** @var FormRuleContextBuilder $builder */ $builder = $child['builder']; foreach ($rootRuleBuilder->getGroups() as $name => $groups) { $builder->addGroup($name, $groups); } $this->compileContext($child['view'], $builder); } }