public function getContents() { $className = $this->getFullClassName($this->_dbTableName, 'Model\\DbTable'); $codeGenFile = new FileGenerator($this->getPath()); $codeGenFile->setClass(new ClassGenerator($className, null, null, '\\Zend\\Db\\Table\\AbstractTable', null, array(new PropertyGenerator('_name', $this->_actualTableName, PropertyGenerator::FLAG_PROTECTED)))); return $codeGenFile->generate(); }
/** * (non-PHPdoc) * * @see \Symfony\Component\Console\Command\Command::execute() */ public function execute(InputInterface $input, OutputInterface $output) { $document = $this->getDocument($input->getArgument('document')); $items = $document->getElement(); $directory = sprintf($input->getArgument('elementOutput'), $document->getFileInfo()->getBasename('.dtd')); $namespace = sprintf($input->getArgument('elementNamespace'), $document->getFileInfo()->getBasename('.dtd')); $parentClass = $input->getArgument('elementParentClass'); $description = str_replace("\\", " ", $namespace); if (!file_exists($directory)) { mkdir($directory, 0777, true); } $progressBar = new ProgressBar($output, $items->count()); $progressBar->setFormat('verbose'); foreach ($items as $item) { $name = sprintf("%sElement", Source::camelCase($item->getName())); $filename = sprintf("%s/%s.php", $directory, $name); $classDescription = sprintf("%s %s", $description, $name); $datetime = new \DateTime(); $properties = array((new PropertyGenerator("name", $item->getName()))->setDocBlock(new DocBlockGenerator(sprintf("%s Name", $classDescription), "", array(new Tag("var", "string")))), (new PropertyGenerator("value", $item->getValue()))->setDocBlock(new DocBlockGenerator(sprintf("%s Value", $classDescription), "", array(new Tag("var", "string"))))); $docblock = new DocBlockGenerator($classDescription, "", array(new Tag("author", "ITC Generator " . $datetime->format("d.m.Y h:m:s")), new Tag("copyright", "LGPL"))); $fileGenerator = new FileGenerator(); $fileGenerator->setClass(new ClassGenerator($name, $namespace, null, $parentClass, array(), $properties, array(), $docblock)); file_put_contents($filename, $fileGenerator->generate()); $progressBar->advance(); } $progressBar->finish(); }
public function generate() { $modelBuilder = $this->controller->getModelBuilder(); $className = $modelBuilder->getName() . 'Controller'; $class = new ClassGenerator(); $class->setName($className); $class->setExtendedClass('CrudController'); $param = new ParameterGenerator(); $param->setName('fb')->setType('FormBuilder'); $body = $this->generateFormBuilderBody(); $docblock = '@param FormBuilder $fb'; $class->addMethod('buildForm', array($param), MethodGenerator::FLAG_PUBLIC, $body, $docblock); $param = new ParameterGenerator(); $param->setName('mb')->setType('ModelBuilder'); $body = ''; $docblock = '@param ModelBuilder $mb'; $class->addMethod('buildModel', array($param), MethodGenerator::FLAG_PUBLIC, $body, $docblock); $param = new ParameterGenerator(); $param->setName('ob')->setType('OverviewBuilder'); $body = ''; $docblock = '@param OverviewBuilder $ob'; $class->addMethod('buildOverview', array($param), MethodGenerator::FLAG_PUBLIC, $body, $docblock); $this->generator->setClass($class); $this->generator->setUses(array('Boyhagemann\\Crud\\CrudController', 'Boyhagemann\\Form\\FormBuilder', 'Boyhagemann\\Model\\ModelBuilder', 'Boyhagemann\\Overview\\OverviewBuilder')); return $this->generator->generate(); }
protected function convert(AbstractConverter $converter, array $schemas, array $targets, OutputInterface $output) { $generator = new ClassGenerator(); $generator->setTargetPhpVersion($converter->getTargetPhpVersion()); $generator->setBaseClass($converter->getBaseClass()); $pathGenerator = new Psr4PathGenerator($targets); $progress = $this->getHelperSet()->get('progress'); $items = $converter->convert($schemas); $progress->start($output, count($items)); foreach ($items as $item) { $progress->advance(1, true); $output->write(" Creating <info>" . $output->getFormatter()->escape($item->getFullName()) . "</info>... "); $path = $pathGenerator->getPath($item); $fileGen = new FileGenerator(); $fileGen->setFilename($path); $classGen = new \Zend\Code\Generator\ClassGenerator(); if ($generator->generate($classGen, $item)) { $fileGen->setClass($classGen); $fileGen->write(); $output->writeln("done."); } else { $output->write("skip."); } } $progress->finish(); }
public function generate() { if ($this->controller) { $modelBuilder = $this->controller->getModelBuilder(); $className = $modelBuilder->getName(); } else { $className = $this->class; } $modelClass = $this->modelClass ? $this->modelClass : $this->class; $class = new ClassGenerator(); $class->setName($className); $class->setExtendedClass('CrudController'); $class->addUse('Boyhagemann\\Crud\\CrudController'); $class->addUse('Boyhagemann\\Form\\FormBuilder'); $class->addUse('Boyhagemann\\Model\\ModelBuilder'); $class->addUse('Boyhagemann\\Overview\\OverviewBuilder'); $param = new ParameterGenerator(); $param->setName('fb')->setType('FormBuilder'); $body = $this->generateFormBuilderBody(); $docblock = '@param FormBuilder $fb'; $class->addMethod('buildForm', array($param), MethodGenerator::FLAG_PUBLIC, $body, $docblock); $param = new ParameterGenerator(); $param->setName('mb')->setType('ModelBuilder'); $body = sprintf('$mb->name(\'%s\')->table(\'%s\');' . PHP_EOL, $modelClass, strtolower(str_replace('\\', '_', $modelClass))); $docblock = '@param ModelBuilder $mb'; $class->addMethod('buildModel', array($param), MethodGenerator::FLAG_PUBLIC, $body, $docblock); $param = new ParameterGenerator(); $param->setName('ob')->setType('OverviewBuilder'); $body = ''; $docblock = '@param OverviewBuilder $ob'; $class->addMethod('buildOverview', array($param), MethodGenerator::FLAG_PUBLIC, $body, $docblock); $this->generator->setClass($class); return $this->generator->generate(); }
/** * getContents() * * @return string */ public function getContents() { $codeGenerator = new FileGenerator(); $codeGenerator->setBody(<<<EOS // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); require_once 'Zend/Loader/StandardAutoloader.php'; \$loader = new Zend\\Loader\\StandardAutoloader(array( 'fallback_autoloader' => true, )) \$loader->register(); EOS ); return $codeGenerator->generate(); }
/** * @interitdoc */ public function writeClass($filename, FileGenerator $fileGenerator) { $dir = dirname($filename); if (!@mkdir($dir, 0755, true) && !is_dir($dir)) { throw new RuntimeException(sprintf('Could not create "%s" directory.', $dir)); } file_put_contents($filename, $fileGenerator->generate()); }
/** * getContents() * * @return string */ public function getContents() { $filter = new \Zend\Filter\Word\DashToCamelCase(); $className = $filter->filter($this->_forClassName) . 'Test'; $codeGenFile = new FileGenerator(); $codeGenFile->setRequiredFiles(array('PHPUnit/Framework/TestCase.php')); $codeGenFile->setClasses(array(new ClassGenerator($className, null, null, 'PHPUnit_Framework_TestCase', array(), array(), array(new MethodGenerator('setUp', array(), MethodGenerator::FLAG_PUBLIC, ' /* Setup Routine */'), new MethodGenerator('tearDown', array(), MethodGenerator::FLAG_PUBLIC, ' /* Tear Down Routine */'))))); return $codeGenFile->generate(); }
private function makeSureConfigFileExist() { if (FALSE === file_exists($this->confPath)) { $fileGenerator = new FileGenerator(); $body = $this->getConfigTemplate(); $fileGenerator->setBody($body); file_put_contents($this->confPath, $fileGenerator->generate()); } }
/** * @param FileGenerator $file * @param Type $type * * @return string */ public function generate(FileGenerator $file, $type) { $class = $file->getClass() ?: new ClassGenerator(); $class->setNamespaceName($type->getNamespace()); $class->setName($type->getName()); $this->ruleSet->applyRules(new TypeContext($class, $type)); foreach ($type->getProperties() as $property) { $this->ruleSet->applyRules(new PropertyContext($class, $type, $property)); } $file->setClass($class); return $file->generate(); }
public function write(array $items) { foreach ($items as $item) { $path = $this->pathGenerator->getPath($item); $fileGen = new FileGenerator(); $fileGen->setFilename($path); $fileGen->setClass($item); $fileGen->write(); $this->logger->debug(sprintf("Written PHP class file %s", $path)); } $this->logger->info(sprintf("Written %s STUB classes", count($items))); }
/** * Registry for the Zend\Code package. * * @param FileGenerator $fileCodeGenerator * @param string $fileName * @throws RuntimeException */ public static function registerFileCodeGenerator(FileGenerator $fileCodeGenerator, $fileName = null) { if ($fileName === null) { $fileName = $fileCodeGenerator->getFilename(); } if ($fileName == '') { throw new RuntimeException('FileName does not exist.'); } // cannot use realpath since the file might not exist, but we do need to have the index // in the same DIRECTORY_SEPARATOR that realpath would use: $fileName = str_replace(['\\', '/'], DIRECTORY_SEPARATOR, $fileName); static::$fileCodeGenerators[$fileName] = $fileCodeGenerator; }
protected function convert(AbstractConverter $converter, array $schemas, array $targets, OutputInterface $output) { $generator = new ClassGenerator(); $pathGenerator = new Psr4PathGenerator($targets); $progress = $this->getHelperSet()->get('progress'); $converter->addAliasMap('http://schemas.microsoft.com/exchange/services/2006/types', 'Or', function ($type) use($schemas) { return "OrElement"; }); $converter->addAliasMap('http://schemas.microsoft.com/exchange/services/2006/types', 'And', function ($type) use($schemas) { return "AndElement"; }); $converter->addAliasMap('http://schemas.microsoft.com/exchange/services/2006/types', 'EmailAddress', function ($type) use($schemas) { return "jamesiarmes\\PEWS\\API\\Type\\EmailAddressType"; }); $items = $converter->convert($schemas); $progress->start($output, count($items)); $classMap = []; foreach ($items as $item) { /** @var PHPClass $item */ $progress->advance(1, true); $output->write(" Creating <info>" . $output->getFormatter()->escape($item->getFullName()) . "</info>... "); $path = $pathGenerator->getPath($item); $fileGen = new FileGenerator(); $fileGen->setFilename($path); $classGen = new \Zend\Code\Generator\ClassGenerator(); $itemClass = $item->getNamespace() . '\\' . $item->getName(); if (class_exists($itemClass)) { $existingClass = Generator\ClassGenerator::fromReflection(new ClassReflection($itemClass)); $classGen = $existingClass; } if ($generator->generate($classGen, $item)) { $fileGen->setClass($classGen); $fileGen->write(); $output->writeln("done."); if (isset($item->type) && $item->type->getName() != "") { $classMap[$item->type->getName()] = '\\' . $classGen->getNamespaceName() . '\\' . $classGen->getName(); } } else { $output->write("skip."); } } $mappingClassReflection = new ClassReflection(ClassMap::class); $mappingClass = Generator\ClassGenerator::fromReflection($mappingClassReflection); $mappingClass->getProperty('classMap')->setDefaultValue($classMap); $fileGen = new FileGenerator(); $fileGen->setFilename($mappingClassReflection->getFileName()); $fileGen->setClass($mappingClass); $fileGen->write(); $progress->finish(); }
/** * * @param DTDDocument $document * @param string $outputDirectory * @param string $namespace * @param string $parentClass */ public function generate(DTDDocument $document, $outputDirectory, $namespace, $parentClass) { if (!file_exists($outputDirectory)) { mkdir($outputDirectory, 0777, true); } $name = ucfirst($document->getFileInfo()->getBasename('.dtd')); $filename = sprintf("%s/%s.php", $outputDirectory, $name); $classGenerator = new ClassGenerator($name, $namespace, null, $parentClass); $fileGenerator = new FileGenerator(); $fileGenerator->setClass($classGenerator); $fileDocblock = new DocBlockGenerator(sprintf("%s %s", str_replace("\\", " ", $namespace), $name)); $fileDocblock->setTag(new Tag("author", "Generator")); $fileDocblock->setTag(new Tag("licence", "LGPL")); $fileGenerator->setDocBlock($fileDocblock); file_put_contents($filename, $fileGenerator->generate()); }
private function generate($version) { $generator = new ClassGenerator(); $docblock = DocBlockGenerator::fromArray(array('shortDescription' => 'PDO Simple Migration Class', 'longDescription' => 'Add your queries below')); $generator->setName('PDOSimpleMigration\\Migrations\\Migration' . $version)->setExtendedClass('AbstractMigration')->addUse('PDOSimpleMigration\\Library\\AbstractMigration')->setDocblock($docblock)->addProperties(array(array('description', 'Migration description', PropertyGenerator::FLAG_STATIC)))->addMethods(array(MethodGenerator::fromArray(array('name' => 'up', 'parameters' => array(), 'body' => '//$this->addSql(/*Sql instruction*/);', 'docblock' => DocBlockGenerator::fromArray(array('shortDescription' => 'Migrate up', 'longDescription' => null)))), MethodGenerator::fromArray(array('name' => 'down', 'parameters' => array(), 'body' => '//$this->addSql(/*Sql instruction*/);', 'docblock' => DocBlockGenerator::fromArray(array('shortDescription' => 'Migrate down', 'longDescription' => null)))))); $file = FileGenerator::fromArray(array('classes' => array($generator))); return $file->generate(); }
function it_generates_types(RuleSetInterface $ruleSet, FileGenerator $file, ClassGenerator $class) { $type = new Type('MyNamespace', 'MyType', ['prop1' => 'string']); $property = $type->getProperties()[0]; $file->generate()->willReturn('code'); $file->getClass()->willReturn($class); $class->setNamespaceName('MyNamespace')->shouldBeCalled(); $class->setName('MyType')->shouldBeCalled(); $file->setClass($class)->shouldBeCalled(); $ruleSet->applyRules(Argument::that(function (ContextInterface $context) use($type) { return $context instanceof TypeContext && $context->getType() === $type; }))->shouldBeCalled(); $ruleSet->applyRules(Argument::that(function (ContextInterface $context) use($type, $property) { return $context instanceof PropertyContext && $context->getType() === $type && $context->getProperty() === $property; }))->shouldBeCalled(); $this->generate($file, $type)->shouldReturn('code'); }
/** * FileGenerator constructor. */ public function __construct() { parent::__construct(); $mockTag = new GenericTag(); $mockTag->setName('mock'); $author = new AuthorTag('ClassMocker'); $docBlock = new DocBlockGenerator(); $docBlock->setShortDescription("Auto generated file by ClassMocker, do not change"); $docBlock->setTag($author); $docBlock->setTag($mockTag); $this->setDocBlock($docBlock); }
public function generate(DTDDocument $document, $outputDirectory, $namespace, $parentClass) { $items = $document->getElement(); $directory = sprintf($outputDirectory, $document->getFileInfo()->getBasename('.dtd')); $namespace = sprintf($namespace, $document->getFileInfo()->getBasename('.dtd')); $description = str_replace("\\", " ", $namespace); if (!file_exists($directory)) { mkdir($directory, 0777, true); } foreach ($items as $item) { $name = sprintf("%sElement", Source::camelCase($item->getName())); $filename = sprintf("%s/%s.php", $directory, $name); $classDescription = sprintf("%s %s", $description, $name); $datetime = new \DateTime(); $properties = array((new PropertyGenerator("name", $item->getName()))->setDocBlock(new DocBlockGenerator(sprintf("%s Name", $classDescription), "", array(new Tag("var", "string")))), (new PropertyGenerator("value", $item->getValue()))->setDocBlock(new DocBlockGenerator(sprintf("%s Value", $classDescription), "", array(new Tag("var", "string"))))); $docblock = new DocBlockGenerator($classDescription, "", array(new Tag("author", "ITC Generator " . $datetime->format("d.m.Y h:m:s")), new Tag("copyright", "LGPL"))); $fileGenerator = new FileGenerator(); $fileGenerator->setClass(new ClassGenerator($name, $namespace, null, $parentClass, array(), $properties, array(), $docblock)); file_put_contents($filename, $fileGenerator->generate()); } }
/** * (non-PHPdoc) * * @see \Symfony\Component\Console\Command\Command::execute() */ public function execute(InputInterface $input, OutputInterface $output) { $document = $this->getDocument($input->getArgument('document')); $directory = $input->getArgument('output'); $namespace = $input->getArgument('namespace'); $parentClass = $input->getArgument('parentClass'); if (!file_exists($directory)) { mkdir($directory, 0777, true); } $name = ucfirst($document->getFileInfo()->getBasename('.dtd')); $output->writeln("Generating Document " . $name); $filename = sprintf("%s/%s.php", $directory, $name); $classGenerator = new ClassGenerator($name, $namespace, null, $parentClass); $fileGenerator = new FileGenerator(); $fileGenerator->setClass($classGenerator); $fileDocblock = new DocBlockGenerator(sprintf("%s %s", str_replace("\\", " ", $namespace), $name)); $fileDocblock->setTag(new Tag("author", "Generator")); $fileDocblock->setTag(new Tag("licence", "LGPL")); $fileGenerator->setDocBlock($fileDocblock); file_put_contents($filename, $fileGenerator->generate()); }
/** * @param string $className * @return \Zend\Code\Generator\ClassGenerator */ public function handle(string $className) { if (!preg_match(static::MATCH_PATTERN, $className, $matches)) { return null; } $baseName = $matches[1]; $namespace = $this->deriveNamespaceFromClassName($className); $class = FileGenerator::fromReflectedFileName(__DIR__ . DIRECTORY_SEPARATOR . "templates" . DIRECTORY_SEPARATOR . "factory.php")->getClass("Factory"); $class->setNamespaceName($namespace)->setName("{$baseName}Factory"); $createMethod = $class->getMethod("create"); $createMethod->setBody('return $this->diContainer->newInstance(' . $baseName . '::class, $params);')->setReturnType("{$namespace}\\{$baseName}"); return $class; }
private function expectedPathForPsr4(array $filePaths, $namespace) { foreach ($filePaths as $file) { $generator = FileGenerator::fromReflectedFileName($file); $phpClassName = $generator->getClass()->getName(); $fileClassName = pathinfo($file, PATHINFO_FILENAME); $phpClassNamespace = $generator->getClass()->getNamespaceName(); if (false === strpos($namespace, $phpClassName)) { throw new \Exception(sprintf("File '%s' namespace is not valid.\nExpected to be under the '%s' namespace, found '%s'.", $file, $namespace, $phpClassNamespace)); } } print_r(func_get_args()); die; }
/** * Search for unnecessary namespace imports and definitions and replace occurrences. * * @param FileGenerator $fileGenerator * @return string Generated code */ public function replaceNamespace(FileGenerator $fileGenerator) { $uses = []; $search = []; $replace = []; foreach ($fileGenerator->getUses() as $import) { $namespace = trim(substr($import[0], 0, strrpos($import[0], '\\')), '\\'); if ($fileGenerator->getNamespace() !== $namespace) { $uses[] = $import; } $name = trim(substr($import[0], strrpos($import[0], '\\')), '\\'); $search[] = '\\' . $import[0]; $search[] = ', \\' . $import[0]; $replace[] = $name; $replace[] = ', ' . $name; } // workaround to reset use imports $reflection = new \ReflectionClass($fileGenerator); $property = $reflection->getProperty('uses'); $property->setAccessible(true); $property->setValue($fileGenerator, $uses); $code = $fileGenerator->generate(); return str_replace($search, $replace, $code); }
/** * Método para saida da classe gerada * @return string Classe gerada */ public function generate() { $this->render(); $fileGenerator = new Generator\FileGenerator(array('classes' => array($this->classGenerator))); return $fileGenerator->generate(); }
public function testGeneratesNamespaceStatements() { $file = new FileGenerator(); $file->setNamespace('Foo\\Bar'); $generated = $file->generate(); $this->assertContains('namespace Foo\\Bar', $generated, $generated); }
/** * @inheritDoc */ public function writeClass(FileGenerator $fileGenerator) { file_put_contents($fileGenerator->getFilename(), $this->replaceNamespace($fileGenerator)); }
require __DIR__ . "/../vendor/autoload.php"; $namespace = "CallFire\\Common\\Resource"; $extendedClass = "AbstractResource"; $xsdUrl = 'https://www.callfire.com/api/1.1/wsdl/callfire-data.xsd'; $sourceDirectory = realpath(__DIR__ . "/../src") . '/' . str_replace('\\', '/', $namespace); $queryMapPath = realpath(__DIR__ . "/../src") . '/CallFire/Api/Rest/querymap.php'; $xsdContent = file_get_contents($xsdUrl); $xsdDocument = new DOMDocument(); $xsdDocument->loadXML($xsdContent); unset($xsdContent); $resourceGenerator = new ResourceGenerator(); $resourceGenerator->setXsd($xsdDocument); $resourceClassGenerator = new ClassGenerator(); $resourceClassGenerator->setExtendedClass($extendedClass); $resourceClassGenerator->setNamespaceName($namespace); $resourceGenerator->setClassGenerator($resourceClassGenerator); $resourceGenerator->generate(); $resourceFiles = $resourceGenerator->generateResourceFiles(); $queryMap = $resourceGenerator->getQueryMap(); if (!is_dir($sourceDirectory)) { mkdir($sourceDirectory, 0777, true); } foreach ($resourceFiles as $resourceFile) { $resourceFile->setFilename("{$sourceDirectory}/{$resourceFile->getClass()->getName()}.php"); $resourceFile->write(); } $queryMapFile = new FileGenerator(); $queryMapFile->setFilename($queryMapPath); $queryMapFile->setBody('return ' . (new ValueGenerator($queryMap))->generate() . ';'); $queryMapFile->write(); passthru('php ' . __DIR__ . '/../vendor/fabpot/php-cs-fixer/php-cs-fixer fix ' . __DIR__ . '/../src/CallFire/Common/Resource/ --level=all');
/** * hasActionMethod() * * @param string $controllerPath * @param string $actionName * @return bool */ public static function hasActionMethod($controllerPath, $actionName) { if (!file_exists($controllerPath)) { return false; } $controllerCodeGenFile = FileGenerator::fromReflectedFileName($controllerPath, true, true); return $controllerCodeGenFile->getClass()->hasMethod($actionName . 'Action'); }
/** * @param null|string $module * @param null|string $migrationBody * @return string */ public function create($module = null, $migrationBody = null) { $path = $this->getMigrationsDirectoryPath($module); list(, $mSec) = explode(".", microtime(true)); $migrationName = date('Ymd_His_') . substr($mSec, 0, 2); $methodUp = array('name' => 'up', 'docblock' => DocBlockGenerator::fromArray(array('shortDescription' => 'Upgrade', 'longDescription' => null))); $methodDown = array('name' => 'down', 'docblock' => DocBlockGenerator::fromArray(array('shortDescription' => 'Degrade', 'longDescription' => null))); if ($migrationBody) { if (isset($migrationBody['up'])) { $upBody = ''; foreach ($migrationBody['up'] as $query) { $upBody .= '$this->query("' . $query . '");' . PHP_EOL; } $methodUp['body'] = $upBody; } if (isset($migrationBody['down'])) { $downBody = ''; foreach ($migrationBody['down'] as $query) { $downBody .= '$this->query("' . $query . '");' . PHP_EOL; } $methodDown['body'] = $downBody; } } $class = new ClassGenerator(); $class->setName('Migration_' . $migrationName)->setExtendedClass('AbstractMigration')->addUse('ZFCTool\\Service\\Migration\\AbstractMigration')->addMethods(array(MethodGenerator::fromArray($methodUp), MethodGenerator::fromArray($methodDown))); $file = new FileGenerator(array('classes' => array($class))); $code = $file->generate(); $migrationPath = $path . '/' . $migrationName . '.php'; file_put_contents($migrationPath, $code); return $migrationPath; }
/** * @param ClassGenerator $class */ protected function writeClass(ClassGenerator $class) { $generator = new FileGenerator(); $generator->setClass($class); $generator->setFilename('src/Flex/Code/Html/Tag/' . $class->getName() . '.php'); $generator->write(); }
/** * Update module class with class map autoloading * * @return bool * @throws \Zend\Code\Generator\Exception */ public function updateModuleWithClassmapAutoloader() { // get needed options to shorten code $path = realpath($this->requestOptions->getPath()); $directory = $this->requestOptions->getDirectory(); $destination = $this->requestOptions->getDestination(); $moduleFile = $directory . '/Module.php'; $moduleClass = str_replace($path . '/module/', '', $directory) . '\\Module'; $moduleName = str_replace($path . '/module/', '', $directory); // check for module file if (!file_exists($moduleFile)) { return false; } // get file and class reflection $fileReflection = new FileReflection($moduleFile, true); $classReflection = $fileReflection->getClass($moduleClass); // setup class generator with reflected class $code = ClassGenerator::fromReflection($classReflection); // check for action method if ($code->hasMethod('getAutoloaderConfig')) { $code->removeMethod('getAutoloaderConfig'); } // add getAutoloaderConfig method with class map $code->addMethodFromGenerator($this->generateGetAutoloaderConfigMethod($destination, $moduleName)); // create file with file generator $file = new FileGenerator(); $file->setClass($code); // add optional doc block if ($this->flagCreateApiDocs) { $file->setDocBlock(new DocBlockGenerator('This file was generated by FrilleZFTool.', null, array($this->generatePackageTag($moduleName), $this->generateSeeTag()))); } // create file with file generator $file = new FileGenerator(); $file->setClass($code); // add optional doc block if ($this->flagCreateApiDocs) { $file->setDocBlock(new DocBlockGenerator('This file was generated by FrilleZFTool.', null, array($this->generatePackageTag($moduleName), $this->generateSeeTag()))); } // write module class if (!file_put_contents($moduleFile, $file->generate())) { return false; } return true; }