예제 #1
0
    /**
     * 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();
    }
예제 #2
0
 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);
 }
예제 #3
0
 /**
  * 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();
 }
예제 #4
0
파일: Generator.php 프로젝트: ncud/sagalaya
 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;
 }