コード例 #1
0
 /**
  * @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);
             }
         }
     }
 }
コード例 #2
0
 /**
  * @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);
     }
 }
コード例 #3
0
 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);
     }
 }