protected function beginWrapperRender(TypesRepositoryInterface $repo, DOMDocument $doc, DOMElement $parentNode, &$route) { if ($this->isOptional()) { $text = $doc->createTextNode('@if(isset($' . Helpers::buildRoute($route) . '))'); $parentNode->appendChild($text); } if ($this->isArray()) { $last = end($route); $text = $doc->createTextNode('@foreach($' . Helpers::buildRoute($route) . ' as $' . Helpers::snakeCase($last) . ')'); $parentNode->appendChild($text); $route = [$last]; } }
public function build($requestType, $rootName, $callback = NULL) { $doc = new DOMDocument("1.0", "UTF-8"); $rootElement = $doc->createElement($rootName); if ($callback) { call_user_func_array($callback, [&$rootElement]); } $doc->appendChild($rootElement); $requestType = $this->repository->findTypeByName($requestType); if ($requestType) { $requestType->render($this->repository, $doc, $rootElement, [Helpers::cleanNamespace($rootName)]); } return $doc->saveXML(); }
public function render(TypesRepositoryInterface $repo, DOMDocument $doc, DOMElement $parentNode, $route) { $parentNode->nodeValue = '{{ $' . Helpers::buildRoute($route) . ' }}'; return $doc; }
protected function parseComplexTypes(TypesRepositoryInterface $repo) { foreach ($this->parseXPath('/xs:schema/xs:complexType') as $complex_type) { $name = $complex_type->getAttribute('name'); $elementNodes = $this->parseXPath($complex_type->getNodePath() . '/xs:sequence/xs:element'); $elements = []; foreach ($elementNodes as $element) { $elName = $element->getAttribute('name'); $elType = NULL; $elComplexType = $element->getAttribute('type'); $elSimpleType = $this->parseXPath($element->getNodePath() . '/xs:simpleType/xs:restriction', 'base'); if ($elComplexType) { $elType = $elComplexType; } elseif (count($elSimpleType)) { $elType = $elSimpleType[0]; } else { $elType = "UnknownType"; } $min_occurs = $element->getAttribute('minOccurs'); $max_occurs = $element->getAttribute('maxOccurs'); $elements[$elName] = new Element(['elementName' => $elName, 'type' => Helpers::cleanNamespace($elType), 'min_occurs' => $min_occurs, 'max_occurs' => $max_occurs]); } $xsd_type = new ComplexType(['name' => $name, 'elements' => $elements]); $repo->registerType($name, $xsd_type); } }