/**
     * @param  State|\Scaffold\State $state
     * @return State|void
     */
    public function build(State $state)
    {
        $model = $state->getModel('options-factory');
        $generator = new ClassGenerator($model->getName());
        $generator->setImplementedInterfaces(['FactoryInterface']);
        $model->setGenerator($generator);
        $generator->addUse('Zend\\ServiceManager\\FactoryInterface');
        $generator->addUse('Zend\\ServiceManager\\ServiceLocatorInterface');
        $options = $state->getModel('options');
        $key = $options->getServiceName();
        $key = substr($key, 0, -7);
        $body = <<<EOF
\$config = \$serviceLocator->get('Config');
return new {$options->getClassName()}(
    isset(\$config['{$key}'])
        ? \$config['{$key}']
        : []
);
EOF;
        $method = new MethodGenerator('createService');
        $method->setParameter(new ParameterGenerator('serviceLocator', 'ServiceLocatorInterface'));
        $method->setBody($body);
        $doc = new DocBlockGenerator('');
        $doc->setTag(new Tag(['name' => 'inhertidoc']));
        $method->setDocBlock($doc);
        $generator->addMethodFromGenerator($method);
    }
Пример #2
0
 public function testDocBlockGetterAndSetter()
 {
     $docblockGenerator = new \Zend\Code\Generator\DocBlockGenerator();
     $method = new MethodGenerator();
     $method->setDocBlock($docblockGenerator);
     $this->assertTrue($docblockGenerator === $method->getDocBlock());
 }
Пример #3
0
 /**
  * Build method factory
  *
  * @param ClassGenerator $generator
  */
 public function buildFactory(ClassGenerator $generator)
 {
     $docBlock = new DocBlockGenerator('@return ' . $this->config->getName());
     $factory = new MethodGenerator();
     $factory->setDocBlock($docBlock);
     $factory->setName('factory');
     $factory->setBody('return new ' . $this->config->getName() . '();');
     $generator->addMethodFromGenerator($factory);
 }
Пример #4
0
    public function postRun(PartInterface $part)
    {
        /**
         * @var $part \Model\Generator\Part\Entity
         */
        /**
         * @var $file \Model\Code\Generator\FileGenerator
         */
        $file = $part->getFile();
        $table = $part->getTable();
        $tags = array(array('name' => 'return', 'description' => 'array'));
        $docblock = new DocBlockGenerator('Initialize indexes');
        $docblock->setTags($tags);
        $resultIndexList = array();
        $indexList = $table->getIndex();
        foreach ($indexList as $index) {
            $resIndex = $index->toArray();
            $resIndex['column_list'] = array();
            switch ($index->getType()) {
                case AbstractIndex::TYPE_PRIMARY:
                    $resIndex['type'] = new ValueGenerator('AbstractModel::INDEX_PRIMARY', ValueGenerator::TYPE_CONSTANT);
                    break;
                case AbstractIndex::TYPE_KEY:
                    $resIndex['type'] = new ValueGenerator('AbstractModel::INDEX_KEY', ValueGenerator::TYPE_CONSTANT);
                    break;
                case AbstractIndex::TYPE_UNIQUE:
                    $resIndex['type'] = new ValueGenerator('AbstractModel::INDEX_UNIQUE', ValueGenerator::TYPE_CONSTANT);
                    break;
            }
            foreach ($resIndex['columns'] as $col) {
                $resIndex['column_list'][] = $col['column_name'];
            }
            unset($resIndex['columns']);
            $resultIndexList[$index->getName()] = $resIndex;
        }
        $property = new PropertyGenerator('indexList', $resultIndexList, PropertyGenerator::FLAG_PROTECTED);
        $body = preg_replace("#^(\\s*)protected #", "\\1", $property->generate()) . "\n";
        $method = new MethodGenerator();
        $method->setName('initIndexList');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setFinal(true);
        $method->setDocBlock($docblock);
        $method->setBody(<<<EOS
{$body}
\$this->indexList = \$indexList;
\$this->setupIndexList();
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
    }
Пример #5
0
 /**
  * Generate an __invoke method
  */
 protected function addInvokeMethod()
 {
     // set action body
     $body = ['// add view helper code here', '$output = \'\';', '', 'return $output;'];
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('__invoke');
     $method->setBody($body);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Called when view helper is executed', null, [new ReturnTag(['string'])]));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
Пример #6
0
 /**
  * Generate an init method
  */
 protected function addInitMethod()
 {
     // set action body
     $body = ['// add form elements and form configuration here'];
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('init');
     $method->setBody($body);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Generate form by adding elements'));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
 /**
  * Generate an init method
  */
 protected function addInitMethod()
 {
     // set action body
     $body = array('// add input objects here');
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('init');
     $method->setBody($body);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Generate input filter by adding inputs'));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
 /**
  * Generate an __invoke method
  */
 protected function addInvokeMethod()
 {
     // set action body
     $body = ['// add controller plugin code here'];
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('__invoke');
     $method->setBody($body);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Called when controller plugin is executed', null, [new ReturnTag(['mixed'])]));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
Пример #9
0
    public function postRun(PartInterface $part)
    {
        /**
         * @var $part \Model\Generator\Part\Entity
         */
        /**
         * @var $file \Model\Code\Generator\FileGenerator
         */
        $file = $part->getFile();
        $table = $part->getTable();
        $tags = array(array('name' => 'var', 'description' => 'array значения по-умолчанию для полей'));
        $docblock = new \Zend\Code\Generator\DocBlockGenerator('Значения по-умолчанию для полей');
        $docblock->setTags($tags);
        $columnCollection = $table->getColumn();
        if (!$columnCollection) {
            return;
        }
        $defaults = '';
        /** @var $column Column */
        foreach ($columnCollection as $column) {
            $columnName = $column->getName();
            $defaultValue = $column->getColumnDefault();
            if (substr($columnName, -5) == '_date') {
                $defaults .= "\$this->setDefaultRule('" . $columnName . "', date('Y-m-d H:i:s'));\n    ";
            } elseif ($defaultValue == 'CURRENT_TIMESTAMP') {
                $defaults .= "\$this->setDefaultRule('" . $columnName . "', date('Y-m-d H:i:s'));\n    ";
            } elseif (!empty($defaultValue)) {
                $defaults .= '$this->setDefaultRule(\'' . $columnName . '\', \'' . (string) $defaultValue . '\');' . "\n    ";
            } elseif (is_null($defaultValue) && $column->isNullable()) {
                $defaults .= '$this->setDefaultRule(\'' . $columnName . '\', null);' . "\n    ";
            }
        }
        $tags = array(array('name' => 'return', 'description' => 'void'));
        $docblock = new DocBlockGenerator('Инициализация значений по-умолчанию');
        $docblock->setTags($tags);
        $method = new MethodGenerator();
        $method->setName('initDefaultsRules');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setFinal(true);
        $method->setDocBlock($docblock);
        $method->setBody(<<<EOS
    {$defaults}
\$this->setupDefaultsRules();
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
    }
Пример #10
0
 /**
  * Generate the create service method
  *
  * @param string $className
  * @param string $managerName
  */
 protected function addCreateServiceMethod($className, $managerName)
 {
     // set action body
     $body = array('/** @var ServiceLocatorAwareInterface $' . $managerName . ' */', '$serviceLocator = $' . $managerName . '->getServiceLocator();', '', '$instance = new ' . $className . '();', '', 'return $instance;');
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('createService');
     $method->setBody($body);
     $method->setParameters(array(new ParameterGenerator($managerName, 'ServiceLocatorInterface')));
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Create service', null, array(new ParamTag($managerName, array('ServiceLocatorInterface')), new ReturnTag(array($className)))));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
 /**
  * Build generators
  *
  * @param  State|\Scaffold\State $state
  * @return \Scaffold\State|void
  */
 public function build(State $state)
 {
     $model = $this->model;
     $generator = new ClassGenerator($model->getName());
     $generator->addUse('Zend\\ServiceManager\\FactoryInterface');
     $generator->addUse('Zend\\ServiceManager\\ServiceLocatorInterface');
     $generator->addUse('Zend\\ServiceManager\\ServiceManager');
     $generator->addUse($state->getServiceModel()->getName());
     $generator->setImplementedInterfaces(['FactoryInterface']);
     $method = new MethodGenerator('createService');
     $method->setParameter(new ParameterGenerator('serviceLocator', 'ServiceLocatorInterface'));
     $method->setBody('return new ' . $state->getServiceModel()->getClassName() . '($serviceLocator);');
     $doc = new DocBlockGenerator('Create service');
     $doc->setTag(new Tag\GenericTag('param', 'ServiceLocatorInterface|ServiceManager $serviceLocator'));
     $doc->setTag(new Tag\GenericTag('return', $state->getServiceModel()->getClassName()));
     $method->setDocBlock($doc);
     $generator->addMethodFromGenerator($method);
     $model->setGenerator($generator);
 }
Пример #12
0
 public function transform()
 {
     $classGenerator = $this->getService()->getClassGenerator();
     if ($createContactBatch = $classGenerator->getMethod('CreateContactBatch')) {
         $newMethod = new CodeGenerator\MethodGenerator();
         $newMethod->setName($createContactBatch->getName());
         $docblock = $createContactBatch->getDocBlock();
         $docblock->setTag((new CodeGenerator\DocBlock\Tag\ParamTag())->setParamName('id')->setDataType('int'));
         $newMethod->setDocBlock($docblock);
         $parameters = $createContactBatch->getParameters();
         $idParameter = new CodeGenerator\ParameterGenerator();
         $idParameter->setName('id');
         $createContactBatch->setParameter($idParameter);
         $newMethod->setParameters(array("id" => $idParameter, "CreateContactBatch" => $parameters['CreateContactBatch']));
         $body = $createContactBatch->getBody();
         $body = str_replace('array()', 'array($id)', $body);
         $newMethod->setBody($body);
         $classGenerator->removeMethod('CreateContactBatch');
         $classGenerator->addMethodFromGenerator($newMethod);
     }
 }
 public function fixPathParameters($classGenerator, $method, $newParameters)
 {
     $oldMethod = $classGenerator->getMethod($method);
     $newMethod = new CodeGenerator\MethodGenerator();
     $newMethod->setName($oldMethod->getName());
     $docblock = $oldMethod->getDocBlock();
     $parameters = $oldMethod->getParameters();
     $body = $oldMethod->getBody();
     $newParameterSpec = array();
     foreach ($newParameters as $name => $type) {
         $docblock->setTag((new CodeGenerator\DocBlock\Tag\ParamTag())->setParamName($name)->setDataType($type));
         $newParameter = new CodeGenerator\ParameterGenerator();
         $newParameter->setName($name);
         $newMethod->setParameter($newParameter);
         $newParameterSpec[$name] = $newParameter;
     }
     $newMethod->setParameters(array_merge($newParameterSpec, array($method => $parameters[$method])));
     $body = str_replace('array()', 'array($' . implode(', $', array_keys($newParameters)) . ')', $body);
     $newMethod->setDocBlock($docblock);
     $newMethod->setBody($body);
     $classGenerator->removeMethod($method);
     $classGenerator->addMethodFromGenerator($newMethod);
 }
Пример #14
0
    public function postRun(PartInterface $part)
    {
        /**
         * @var $part \Model\Generator\Part\Entity
         */
        /**
         * @var $file \Model\Code\Generator\FileGenerator
         */
        $file = $part->getFile();
        $tableNameAsCamelCase = $part->getTable()->getNameAsCamelCase();
        $tags = array(array('name' => 'return', 'description' => '\\Model\\' . $tableNameAsCamelCase . 'Model экземпляр модели'));
        $docblock = new DocBlockGenerator('Получить экземпляр модели ' . $tableNameAsCamelCase);
        $docblock->setTags($tags);
        $method = new MethodGenerator();
        $method->setName('getInstance');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setStatic(true);
        $method->setDocBlock($docblock);
        $method->setBody(<<<EOS
return parent::getInstance();
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
    }
Пример #15
0
    /**
     * @param PartInterface $part
     */
    public function preRun(PartInterface $part)
    {
        /**
         * @var $part \Model\Generator\Part\Entity
         */
        /**
         * @var $file \Model\Code\Generator\FileGenerator
         */
        $file = $part->getFile();
        /**
         * @var $table \Model\Cluster\Schema\Table
         */
        $table = $part->getTable();
        /** @var $columnList Column[]  */
        $columnList = $table->getColumn();
        foreach ($columnList as $column) {
            $columnName = $column->getName();
            $columnComment = $column->getComment();
            if ($columnComment) {
                $shortDescription = "Get " . mb_strtolower($columnComment, 'UTF-8') . ' (' . $column->getTable()->getName() . '.' . $columnName . ')';
            } else {
                $shortDescription = 'Get ' . $column->getTable()->getName() . '.' . $columnName;
            }
            $docBlock = new DocBlockGenerator($shortDescription);
            $docBlock->setTags(array(array('name' => 'return', 'description' => $column->getTypeAsPhp())));
            $method = new MethodGenerator();
            $method->setName('get' . $column->getNameAsCamelCase());
            $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
            $method->setDocBlock($docBlock);
            $method->setBody(<<<EOS
return \$this->get('{$columnName}');
EOS
);
            $part->getFile()->getClass()->addMethodFromGenerator($method);
        }
    }
Пример #16
0
    public function postRun(PartInterface $part)
    {
        /**
         * @var $part \Model\Generator\Part\Entity
         */
        /**
         * @var $file \Model\Code\Generator\FileGenerator
         */
        $file = $part->getFile();
        $tableName = $part->getTable()->getName();
        $schema = $part->getTable()->getSchema()->getName();
        $docblock = new DocBlockGenerator('Конструктор');
        $method = new MethodGenerator();
        $method->setName('__construct');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setDocBlock($docblock);
        $method->setBody(<<<EOS
\$this->setName('{$tableName}');
\$this->setDbAdapterName('{$schema}_db');
parent::__construct();
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
    }
 /**
  * @param string           $columnName
  * @param ConstraintObject $foreignKey
  */
 protected function addOptionsSetter($columnName, ConstraintObject $foreignKey)
 {
     $body = '$this->' . $columnName . 'Options = $' . $columnName . 'Options;';
     $parameter = new ParameterGenerator($columnName . 'Options', 'array');
     $setMethodName = 'set' . ucfirst($columnName) . 'Options';
     $setMethod = new MethodGenerator($setMethodName);
     $setMethod->addFlag(MethodGenerator::FLAG_PUBLIC);
     $setMethod->setParameter($parameter);
     $setMethod->setDocBlock(new DocBlockGenerator('Set ' . $columnName . ' options', null, [['name' => 'param', 'description' => 'array $' . $columnName . 'Options']]));
     $setMethod->setBody($body);
     $this->addMethodFromGenerator($setMethod);
 }
 /**
  * Generate the create service method
  *
  * @param string $className
  * @param string $moduleName
  * @param string $tableName
  */
 protected function addCreateServiceMethod($className, $moduleName, $tableName)
 {
     $managerName = 'serviceLocator';
     $tableGatewayName = ucfirst($tableName) . 'TableGateway';
     $tableGatewayService = $moduleName . '\\' . $this->config['namespaceTableGateway'] . '\\' . ucfirst($tableName);
     // set action body
     $body = ['/** @var ' . $tableGatewayName . ' $tableGateway */', '$tableGateway = $serviceLocator->get(\'' . $tableGatewayService . '\');', '', '$instance = new ' . $className . '($tableGateway);', '', 'return $instance;'];
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('createService');
     $method->setBody($body);
     $method->setParameters([new ParameterGenerator($managerName, 'ServiceLocatorInterface')]);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Create service', null, [new ParamTag($managerName, ['ServiceLocatorInterface']), new ReturnTag([$className])]));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
Пример #19
0
 /**
  * Generate an hydrate method
  */
 protected function addHydrateMethod()
 {
     // set action body
     $body = ['// add extended hydrator logic here', 'return parent::hydrate($data, $object);'];
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('hydrate');
     $method->setBody($body);
     $method->setParameters([new ParameterGenerator('data', 'array'), new ParameterGenerator('object', 'object')]);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Hydrate an object by populating data', null, [new ParamTag('data', ['array']), new ParamTag('object', ['object']), new ReturnTag(['object'])]));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
Пример #20
0
 protected function buildDelete(ClassGenerator $generator, State $state)
 {
     $body = '$this->getEntityManager()->remove($model);';
     $method = new MethodGenerator('delete');
     $method->setParameter(new ParameterGenerator('model', $state->getEntityModel()->getClassName()));
     $method->setDocBlock(new DocBlockGenerator());
     $method->getDocBlock()->setTag(new Tag\GenericTag('param', $state->getEntityModel()->getClassName() . ' $model'));
     $method->setBody($body);
     $generator->addMethodFromGenerator($method);
 }
Пример #21
0
 /**
  * Generate a filter method
  */
 protected function addFilterMethod()
 {
     // set action body
     $body = ['// add filter code here', 'return $value;'];
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('filter');
     $method->setBody($body);
     $method->setParameters([new ParameterGenerator('value', 'mixed')]);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Called when filter is executed', null, [new ParamTag('value', ['mixed']), new ReturnTag(['mixed'])]));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
Пример #22
0
 /**
  * Add a getOptions() method if table has an external dependency
  *
  * @param $moduleName
  *
  * @return MethodGenerator
  */
 protected function addGetOptionsMethod($moduleName)
 {
     $entityClass = $this->filterUnderscoreToCamelCase($this->tableName) . 'Entity';
     /** @var ConstraintObject $primaryKey */
     $primaryKey = $this->loadedTables[$this->tableName]['primaryKey'];
     $body = [];
     $body[] = '$options = [];';
     $body[] = '';
     $body[] = '/** @var ' . $entityClass . ' $entity */';
     $body[] = 'foreach ($this->fetchAllEntities() as $entity) {';
     $body[] = '    $columns = [';
     foreach ($this->loadedTables[$this->tableName]['columns'] as $columnName => $columnType) {
         if (in_array($columnName, $primaryKey->getColumns())) {
             continue;
         }
         $getMethod = 'get' . ucfirst($this->filterUnderscoreToCamelCase($columnName));
         $body[] = '        $entity->' . $getMethod . '(),';
     }
     $body[] = '    ];';
     $body[] = '';
     $body[] = '    $options[$entity->getIdentifier()] = implode(\' \', $columns);';
     $body[] = '}';
     $body[] = '';
     $body[] = 'return $options;';
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     $this->addUse($moduleName . '\\' . $this->config['namespaceEntity'] . '\\' . $entityClass);
     $selectMethod = new MethodGenerator('getOptions');
     $selectMethod->addFlag(MethodGenerator::FLAG_PUBLIC);
     $selectMethod->setDocBlock(new DocBlockGenerator('Get option list', null, [['name' => 'return', 'description' => 'array']]));
     $selectMethod->setBody($body);
     $this->addMethodFromGenerator($selectMethod);
     return true;
 }
Пример #23
0
 /**
  * Generate the getConfig() method
  *
  * @return MethodGenerator
  */
 protected function generateGetConfigMethod()
 {
     // create method body
     $body = new ValueGenerator();
     $body->initEnvironmentConstants();
     $body->setValue('include __DIR__ . \'/config/module.config.php\'');
     // create method
     $method = new MethodGenerator();
     $method->setName('getConfig');
     $method->setBody('return ' . $body->generate() . ';' . AbstractGenerator::LINE_FEED);
     // add optional doc block
     if ($this->flagCreateApiDocs) {
         $method->setDocBlock(new DocBlockGenerator('Get module configuration', null, array($this->generateReturnTag('array'))));
     }
     return $method;
 }
Пример #24
0
    public function postRun(PartInterface $part)
    {
        /**
         * @var $part \Model\Generator\Part\Entity
         */
        /**
         * @var $file \Model\Code\Generator\FileGenerator
         */
        $file = $part->getFile();
        $columnCollection = $part->getTable()->getColumn();
        $template = '';
        /** @var $column Column */
        foreach ($columnCollection as $column) {
            $name = $column->getName();
            $requiredFlag = !($column->isNullable() || $column->getName() == 'id');
            if ($columnConfig = $part->getColumntConfig($column)) {
                if ($columnConfig && isset($columnConfig['validators'])) {
                    foreach ($columnConfig['validators'] as $validator) {
                        if (isset($validator['params'])) {
                            $validatorParams = $this->prepareValidatorParams($validator['params'], $column);
                            $validatorParams = $this->varExportMin($validatorParams, true);
                        } else {
                            $validatorParams = null;
                        }
                        if ($validatorParams && $validatorParams != 'NULL') {
                            $template .= "\$this->addValidatorRule('{$name}', Model::getValidatorAdapter()->getValidatorInstance('{$validator['name']}', {$validatorParams}), " . ($requiredFlag ? 'true' : 'false') . ");\n";
                        } else {
                            $template .= "\$this->addValidatorRule('{$name}', Model::getValidatorAdapter()->getValidatorInstance('{$validator['name']}'), " . ($requiredFlag ? 'true' : 'false') . ");\n";
                        }
                    }
                }
            }
        }
        $template = rtrim($template, "\r\n, ");
        //$tableNameAsCamelCase = $part->getTable()->getNameAsCamelCase();
        $tags = array(array('name' => 'return', 'description' => 'array Model массив с фильтрами по полям'));
        $docblock = new DocBlockGenerator('Получить правила для фильтрации ');
        $docblock->setTags($tags);
        $method = new MethodGenerator();
        $method->setName('initValidatorRules');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setStatic(false);
        $method->setFinal(true);
        $method->setDocBlock($docblock);
        $method->setBody(<<<EOS
{$template}
\$this->setupValidatorRules();
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
    }
 /**
  * Generate the create service method
  *
  * @param string $className
  * @param        $moduleName
  * @param string $entityModule
  * @param        $entityClass
  */
 protected function addCreateServiceMethod($className, $moduleName, $entityModule, $entityClass)
 {
     // prepare repository params
     $repositoryClass = str_replace('Entity', '', $entityClass) . 'Repository';
     $repositoryParam = lcfirst($repositoryClass);
     $repositoryService = $entityModule . '\\' . $this->config['namespaceRepository'] . '\\' . str_replace('Entity', '', $entityClass);
     // prepare form params
     if (in_array($className, ['CreateController', 'UpdateController'])) {
         $formClass = str_replace('Entity', '', $entityClass) . 'DataForm';
         $formParam = lcfirst($formClass);
         $formService = $moduleName . '\\Data\\Form';
     } elseif (in_array($className, ['DeleteController'])) {
         $formClass = str_replace('Entity', '', $entityClass) . 'DeleteForm';
         $formParam = lcfirst($formClass);
         $formService = $moduleName . '\\Delete\\Form';
     } else {
         $formClass = null;
         $formParam = null;
         $formService = null;
     }
     // set action body
     $body = [];
     $body[] = '$serviceLocator = $controllerManager->getServiceLocator();';
     $body[] = '';
     if ($formClass) {
         $body[] = '/** @var ServiceLocatorInterface $formElementManager */';
         $body[] = '$formElementManager = $serviceLocator->get(\'FormElementManager\');';
         $body[] = '';
     }
     $body[] = '/** @var ' . $repositoryClass . ' $' . $repositoryParam . ' */';
     $body[] = '$' . $repositoryParam . ' = $serviceLocator->get(\'' . $repositoryService . '\');';
     $body[] = '';
     if ($formClass) {
         $body[] = '/** @var ' . $formClass . ' $' . $formParam . ' */';
         $body[] = '$' . $formParam . ' = $formElementManager->get(\'' . $formService . '\');';
         $body[] = '';
     }
     $body[] = '$instance = new ' . $className . '();';
     $body[] = '$instance->set' . $repositoryClass . '($' . $repositoryParam . ');';
     if ($formClass) {
         $body[] = '$instance->set' . $formClass . '($' . $formParam . ');';
     }
     $body[] = '';
     $body[] = 'return $instance;';
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('createService');
     $method->setBody($body);
     $method->setParameters([new ParameterGenerator('controllerManager', 'ServiceLocatorInterface')]);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Create service', null, [new ParamTag('controllerManager', ['ServiceLocatorInterface', 'ServiceLocatorAwareInterface']), new ReturnTag([$className])]));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
 /**
  * Add a selectWith() method if table has an external dependency
  *
  * @return MethodGenerator
  */
 protected function addSelectWithMethod()
 {
     $foreignKeys = $this->loadedTables[$this->tableName]['foreignKeys'];
     if (empty($foreignKeys)) {
         return true;
     }
     $body = [];
     /** @var ConstraintObject $foreignKey */
     foreach ($foreignKeys as $foreignKey) {
         $refTableName = $foreignKey->getReferencedTableName();
         $refTableColumns = $this->loadedTables[$refTableName]['columns'];
         $body[] = '$select->join(';
         $body[] = '    \'' . $refTableName . '\',';
         $body[] = '    \'' . $this->tableName . '.' . $foreignKey->getColumns()[0] . ' = ' . $refTableName . '.' . $foreignKey->getReferencedColumns()[0] . '\',';
         $body[] = '    [';
         /** @var ColumnObject $column */
         foreach ($refTableColumns as $column) {
             $body[] = '        \'' . $refTableName . '.' . $column->getName() . '\' => \'' . $column->getName() . '\',';
         }
         $body[] = '    ]';
         $body[] = ');';
         $body[] = '';
     }
     $body[] = 'return parent::selectWith($select);';
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     $this->addUse('Zend\\Db\\ResultSet\\ResultSetInterface');
     $this->addUse('Zend\\Db\\Sql\\Select');
     $selectMethod = new MethodGenerator('selectWith');
     $selectMethod->addFlag(MethodGenerator::FLAG_PUBLIC);
     $selectMethod->setParameter(new ParameterGenerator('select', 'Select'));
     $selectMethod->setDocBlock(new DocBlockGenerator('Add join tables', null, [['name' => 'param', 'description' => 'Select $select'], ['name' => 'return', 'description' => 'ResultSetInterface']]));
     $selectMethod->setBody($body);
     $this->addMethodFromGenerator($selectMethod);
     return true;
 }
Пример #27
0
 /**
  * @param ClassGenerator $class
  * @param Attribute $tagAttribute
  */
 protected function addAttribute(ClassGenerator $class, Attribute $tagAttribute)
 {
     $methodName = str_replace(':', '-', $tagAttribute->getName());
     $methodName = ucfirst($this->stringToCamelCaseConverter->convert($methodName, '-'));
     $method = new MethodGenerator();
     if ($tagAttribute->isFlag()) {
         $method->setName('is' . $methodName);
         $method->setParameter(new ParameterGenerator('v', 'bool', true));
     } else {
         $method->setName('set' . $methodName);
         $method->setParameter(new ParameterGenerator('v', 'string'));
     }
     $body = [];
     $body[] = '$this->attributes[\'' . $tagAttribute->getName() . '\'] = $v;';
     $body[] = 'return $this;';
     $method->setBody(implode(PHP_EOL, $body));
     $docBlock = new DocBlockGenerator();
     $docBlock->setTag(new GenericTag('var', 'string'));
     $docBlock->setTag(new GenericTag('return', '$this'));
     if (!is_null($tagAttribute->getDescription())) {
         $docBlock->setLongDescription($tagAttribute->getDescription());
     }
     $method->setDocBlock($docBlock);
     $class->addMethodFromGenerator($method);
 }
Пример #28
0
 private function getServiceCode()
 {
     $code = new ClassGenerator($this->service->getName(), $this->namespace, null, '\\SoapClient');
     $doc = $this->service->getDoc();
     if ($doc) {
         $docBlock = new DocBlockGenerator($doc);
         $code->setDocBlock($docBlock);
     }
     foreach ($this->service->getFunctions() as $function) {
         $method = new MethodGenerator($function->getMethod());
         $docBlock = new DocBlockGenerator($function->getDoc());
         foreach ($function->getParams() as $param) {
             $methodParam = new ParameterGenerator($param->getName());
             if (false === $param->isPrimitive()) {
                 $methodParam->setType('\\' . $this->getFullNamespace($param->getType()));
             }
             $method->setParameter($methodParam);
             $tag = new Tag();
             $tag->setName('property');
             $type = $param->getType();
             if (false === $param->isPrimitive()) {
                 $type = '\\' . $this->getFullNamespace($param->getType());
             }
             $tag->setDescription(sprintf('%s $%s', $type, $param->getName()));
             $docBlock->setTag($tag);
         }
         $tag = new Tag();
         $tag->setName('returns');
         $tag->setDescription("\\" . $this->getFullNamespace($function->getReturns()));
         $docBlock->setTag($tag);
         $method->setBody(sprintf('return $this->__soapCall("%s", func_get_args());', $function->getName()));
         $method->setDocBlock($docBlock);
         $code->addMethodFromGenerator($method);
     }
     return $code;
 }
Пример #29
0
 /**
  * Generate an hydrate method
  */
 protected function addHydrateMethod()
 {
     $refTableData = $this->loadedTables[$this->refTableName];
     /** @var ColumnObject $firstColumn */
     $firstColumn = reset($refTableData['columns']);
     // set action body
     $body = [];
     $body[] = 'if (isset($data[\'' . $this->refTableName . '.' . $firstColumn->getName() . '\'])) {';
     /** @var ColumnObject $column */
     foreach ($refTableData['columns'] as $column) {
         $body[] = '    $' . $column->getName() . ' = $data[\'' . $this->refTableName . '.' . $column->getName() . '\'];';
     }
     $body[] = '} else {';
     /** @var ColumnObject $column */
     foreach ($refTableData['columns'] as $column) {
         $body[] = '    $' . $column->getName() . ' = $value;';
     }
     $body[] = '}';
     $body[] = '';
     $body[] = '$' . $this->refTableName . ' = new ' . $this->entityClass . '();';
     $body[] = '$' . $this->refTableName . '->exchangeArray(';
     $body[] = '    [';
     /** @var ColumnObject $column */
     foreach ($refTableData['columns'] as $column) {
         $body[] = '        \'' . $column->getName() . '\' => $' . $column->getName() . ',';
     }
     $body[] = '    ]';
     $body[] = ');';
     $body[] = '';
     $body[] = 'return $' . $this->refTableName . ';';
     $body = implode(AbstractGenerator::LINE_FEED, $body);
     // create method
     $method = new MethodGenerator();
     $method->setName('hydrate');
     $method->setBody($body);
     $method->setParameters([new ParameterGenerator('value'), new ParameterGenerator('data', 'array', [])]);
     // check for api docs
     if ($this->config['flagAddDocBlocks']) {
         $method->setDocBlock(new DocBlockGenerator('Hydrate an entity by populating data', null, [new ParamTag('value'), new ParamTag('data', ['array']), new ReturnTag([$this->entityClass])]));
     }
     // add method
     $this->addMethodFromGenerator($method);
 }
Пример #30
0
    protected function viewStub($part)
    {
        /**
         * @var $part \Model\Generator\Part\Model
         */
        /**
         * @var $file \Model\Code\Generator\FileGenerator
         */
        $file = $part->getFile();
        $table = $part->getTable();
        $tableNameAsCamelCase = $table->getNameAsCamelCase();
        $entity = $tableNameAsCamelCase . 'Entity';
        $collection = $tableNameAsCamelCase . 'Collection';
        $p = new \Zend\Code\Generator\ParameterGenerator('cond');
        $p->setType('Cond');
        $p->setDefaultValue(null);
        $params[] = $p;
        $docblock = new DocBlockGenerator('Получить объект условий в виде представления \'Extended\'

$param Cond $cond
$return Cond
        ');
        $method = new MethodGenerator();
        $method->setName('getCondAsExtendedView');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setFinal(false);
        $method->setDocBlock($docblock);
        $method->setParameters($params);
        $method->setBody(<<<EOS
\$cond = \$this->prepareCond(\$cond);
\$cond->where(array('status' => 'active'));
return \$cond;
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
        $p = new \Zend\Code\Generator\ParameterGenerator('cond');
        $p->setType('Cond');
        $p->setDefaultValue(null);
        $params[] = $p;
        $docblock = new DocBlockGenerator('Получить элемент в виде представления \'Extended\'

@param Cond $cond
@return ' . $entity);
        $method = new MethodGenerator();
        $method->setName('getAsExtendedView');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setFinal(false);
        $method->setDocBlock($docblock);
        $method->setParameters($params);
        $method->setBody(<<<EOS
\$cond = \$this->getCondAsExtendedView(\$cond);
return \$this->get(\$cond);
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
        $p = new \Zend\Code\Generator\ParameterGenerator('cond');
        $p->setType('Cond');
        $p->setDefaultValue(null);
        $params[] = $p;
        $docblock = new DocBlockGenerator('Получить коллекцию в виде представления \'Extended\'

@param Cond $cond
@return ' . $collection);
        $method = new MethodGenerator();
        $method->setName('getCollectionAsExtendedView');
        $method->setVisibility(AbstractMemberGenerator::VISIBILITY_PUBLIC);
        $method->setFinal(false);
        $method->setDocBlock($docblock);
        $method->setParameters($params);
        $method->setBody(<<<EOS
\$cond = \$this->getCondAsExtendedView(\$cond);
return \$this->getCollection(\$cond);
EOS
);
        $file->getClass()->addMethodFromGenerator($method);
    }