/**
  * @param $nodeName
  *
  * @return \Symfony\Component\Config\Definition\ArrayNode
  */
 private function getChildNode($nodeName)
 {
     /** @var ArrayNode[] $childs */
     $childs = $this->tree->getChildren();
     self::assertArrayHasKey($nodeName, $childs);
     return $childs[$nodeName];
 }
Esempio n. 2
0
 /**
  * Processes an array of configurations.
  *
  * @param array     $validated  merged and validated array
  * @param array     $validating merging and validating array
  * @param ArrayNode $node       merging node
  * @param ArrayNode $masterNode merged node (master node)
  *
  * @return array list of (validated array, merged node)
  */
 public function process(array $validated, array $validating, ArrayNode $node, ArrayNode $masterNode = null)
 {
     // no setting master node
     if (is_null($masterNode)) {
         // set a node to master node
         $masterNode = $node;
         // has setting
     } else {
         // merge a node to master node
         // enabled master node setting when exists the same key validation
         // check existence for avoid exception trying to set a key that already set
         $childrenAll = $masterNode->getChildren();
         foreach ($node->getChildren() as $name => $child) {
             if (!isset($childrenAll[$name])) {
                 $masterNode->addChild($child);
             }
         }
     }
     // validate root node name, target is merging/validating array
     foreach ($validating as $name => $config) {
         if ($masterNode->getName() !== $name || $node->getName() !== $name) {
             throw new \Exception(sprintf('Settings root[%s] is different from Configuration root[%s] or part[%s].', $name, $masterNode->getName(), $node->getName()));
         }
     }
     // directly set validated array without normalize/merge/finalize
     $currentConfig = $validated;
     // loop a validating array
     foreach ($validating as $config) {
         // execute a node's normalize to validate key
         $config = $node->normalize($config);
         // execute a master node's merge to reflect cannotBeOverwritten key setting and so on
         $currentConfig = $masterNode->merge($currentConfig, $config);
     }
     // execute a master node's finalize
     $finalized = $masterNode->finalize($currentConfig);
     return array($finalized, $masterNode);
 }