/** * getContents() * * @return string */ public function getContents() { $className = $this->_moduleName ? ucfirst($this->_moduleName) . '\\' : ''; $className .= ucfirst($this->_controllerName) . 'Controller'; $codeGenFile = new FileGenerator(); $codeGenFile->setFilename($this->getPath()); $cg = new ClassGenerator($className); $cg->setMethod(new MethodGenerator('init', array(), null, '/* Initialize action controller here */')); $codeGenFile->setClass($cg); if ($className == 'ErrorController') { $codeGenFile = new FileGenerator(); $codeGenFile->setFilename($this->getPath()); $cg = new ClassGenerator($className); $cg->setMethods(array(new MethodGenerator('errorAction', array(), null, <<<'EOS' $errors = $this->_getParam('error_handler'); if (!$errors || !$errors instanceof \ArrayObject) { $this->view->vars()->message = 'You have reached the error page'; return; } switch ($errors->type) { case \Zend\Controller\Plugin\ErrorHandler::EXCEPTION_NO_ROUTE: case \Zend\Controller\Plugin\ErrorHandler::EXCEPTION_NO_CONTROLLER: case \Zend\Controller\Plugin\ErrorHandler::EXCEPTION_NO_ACTION: // 404 error -- controller or action not found $this->getResponse()->setHttpResponseCode(404); $priority = \Zend\Log\Logger::NOTICE; $this->view->vars()->message = 'Page not found'; break; default: // application error $this->getResponse()->setHttpResponseCode(500); $priority = \Zend\Log\Logger::CRIT; $this->view->vars()->message = 'Application error'; break; } // Log exception, if logger available if (($log = $this->getLog())) { $log->log($this->view->vars()->message, $priority, $errors->exception); $log->log('Request Parameters', $priority, $errors->request->getParams()); } // conditionally display exceptions if ($this->getInvokeArg('displayExceptions') == true) { $this->view->vars()->exception = $errors->exception; } $this->view->vars()->request = $errors->request; EOS ), new MethodGenerator('getLog', array(), null, <<<'EOS' /* @var $bootstrap Zend\Application\Bootstrap */ $bootstrap = $this->getInvokeArg('bootstrap'); if (!$bootstrap->getBroker()->hasPlugin('Log')) { return false; } $log = $bootstrap->getResource('Log'); return $log; EOS ))); } // store the generator into the registry so that the addAction command can use the same object later FileGeneratorRegistry::registerFileCodeGenerator($codeGenFile); // REQUIRES filename to be set return $codeGenFile->generate(); }
public function testMethodAccessors() { $classGenerator = new ClassGenerator(); $classGenerator->setMethods(array('methodOne', new MethodGenerator('methodTwo'))); $methods = $classGenerator->getMethods(); $this->assertEquals(count($methods), 2); $this->isInstanceOf(current($methods), '\\Zend\\Code\\Generator\\PhpMethod'); $method = $classGenerator->getMethod('methodOne'); $this->isInstanceOf($method, '\\Zend\\Code\\Generator\\PhpMethod'); $this->assertEquals($method->getName(), 'methodOne'); // add a new property $classGenerator->setMethod('methodThree'); $this->assertEquals(count($classGenerator->getMethods()), 3); }
/** * getContents() * * @return string */ public function getContents() { $filter = new \Zend\Filter\Word\DashToCamelCase(); $className = $filter->filter($this->_projectProviderName) . 'Provider'; $class = new ClassGenerator($className, null, null, '\\Zend\\Tool\\Project\\Provider\\AbstractProvider'); $methods = array(); foreach ($this->_actionNames as $actionName) { $methods[] = new MethodGenerator($actionName, array(), MethodGenerator::FLAG_PUBLIC, ' /** @todo Implementation */'); } if ($methods) { $class->setMethods($methods); } $codeGenFile = new \Zend\Code\Generator\FileGenerator(); $codeGenFile->setClass($class); return $codeGenFile->generate(); }
public function buildModel($model) { $class = new ClassGenerator($model->config->name); $class->setExtendedClass('\\app\\extensions\\data\\Model'); $class->setNamespaceName('app\\models'); $repository = "{$model->config->repository}" == "true" ? "(repositoryClass=\"app\\resources\\repository\\{$model->config->name}Repository\")\n" : null; $callback = "{$model->config->callback}" == "true" ? "@HasLifecycleCallbacks\n" : null; $table = "@Table(name=\"{$model->config->table}\")"; $docblock = new DocblockGenerator("@Entity" . $repository . $callback . $table); $class->setDocblock($docblock); $validations = array(); foreach ($model->fields->field as $field) { $type = "{$field->type}"; $nullable = isset($field->nullable) ? ", nullable=\"{$field->nullable}\"" : null; $length = isset($field->length) ? ", length=\"{$field->length}\"" : null; $default = isset($field->default) ? "{$field->default}" : null; if ($type == "boolean" && $default) { $default = $default == "true" ? true : false; } $property = new PropertyGenerator("{$field->name}", $default, PropertyGenerator::FLAG_PROTECTED); switch ($type) { case "index": $docblock = '@Id @Column(type="integer") @GeneratedValue'; break; case "relation": $mappedBy = isset($field->mappedBy) ? ", mappedBy=\"{$field->mappedBy}\"" : ""; $inversedBy = isset($field->inversedBy) ? ", inversedBy=\"{$field->inversedBy}\"" : ""; $cascades = ''; if (isset($field->cascades->cascade[0])) { $cascades = ", cascade={"; foreach ($field->cascades->cascade as $cascade) { $cascades .= "\"{$cascade}\","; } $cascades = substr($cascades, 0, -1) . "}"; } $docblock = "@{$field->relation}(targetEntity=\"{$field->targetEntity}\"{$mappedBy}{$inversedBy}{$cascades})"; break; default: $docblock = "@Column(type=\"{$type}\"{$nullable}{$length})"; } $property->setDocblock($docblock); $class->setProperty($property); } foreach ($model->validations->validation as $validation) { $validations["{$validation->field}"] = array(); foreach ($validation->rules->rule as $rule) { $validations["{$validation->field}"][] = array("{$rule->type}", "message" => "{$rule->message}"); } } if (!empty($validations)) { $class->setProperty(new PropertyGenerator("validations", $validations, PropertyGenerator::FLAG_PROTECTED)); } if ($callback) { $beforePersist = new MethodGenerator('beforePersist'); $beforeUpdate = new MethodGenerator('beforeUpdate'); $beforePersist->setDocblock("@PrePersist"); $beforeUpdate->setDocblock("@PreUpdate"); $beforePersist->setBody("\$this->created = new \\DateTime();"); $beforeUpdate->setBody("\$this->modified = new \\DateTime();"); $class->setMethods(array($beforePersist, $beforeUpdate)); } return $class; }