Example #1
0
 /**
  * @param $class
  * @param $newClass
  * @param array $types
  * @return string
  * @throws \Nette\InvalidArgumentException
  */
 protected function prepareClassTemplate($class, $newClass, array $types = array())
 {
     $ref = ClassType::from($class);
     if (!$ref->hasAnnotation('template')) {
         throw new InvalidArgumentException("Class '{$class}' is not template. Annotation @template is not defined");
     }
     $str = trim(file_get_contents($ref->getFileName()));
     $namespace = $ref->getNamespaceName();
     $templateTypes = explode(' ', preg_replace('!\\s+!', ' ', str_replace(',', ' ', $ref->getAnnotation('template'))));
     if (count($templateTypes) !== count($types)) {
         throw new InvalidArgumentException();
     }
     $template = new Template($str);
     $template->replaceClassName($newClass);
     foreach ($templateTypes as $key => $templateType) {
         $template->replaceClassString($templateType, $types[$key]);
     }
     $template->makeAbsoluteClassNames($namespace);
     return (string) $template;
 }