/** * @param ControllerSpec $spec * @return \PhpParser\Node[] */ private function doGenerate(ControllerSpec $spec) { $factory = new \PhpParser\BuilderFactory(); $stmts = array(); $stmts[] = $factory->namespace(array($spec->getBundle()->getNamespace(), 'Controller')); $class = $factory->class($spec->getName() . 'Controller'); if ($spec->getBaseClass()) { $stmts[] = $factory->use($spec->getBaseClass()); $class->extend(new Name(array_slice($spec->getBaseClass(), -1, 1))); if ($spec->getOptions()->isStrictOOP()) { $class->makeFinal(); } } foreach ($spec->getActions() as $action) { $class->addStmt($factory->method($action . 'Action')); } $stmts[] = $class; $nodes = array_map(function ($stmt) { return $stmt->getNode(); }, $stmts); return $nodes; }
/** * @param \EBT\ExtensionBuilder\Domain\Model\ClassObject\Method $methodObject * @return \PhpParser\Node\Stmt\ClassMethod */ public function buildMethodNode(\EBT\ExtensionBuilder\Domain\Model\ClassObject\Method $methodObject) { $factory = new \PhpParser\BuilderFactory(); $methodNodeBuilder = $factory->method($methodObject->getName()); $parameters = $methodObject->getParameters(); if (count($parameters) > 0) { foreach ($parameters as $parameter) { $parameterNode = $this->buildParameterNode($parameter); $methodNodeBuilder->addParam($parameterNode); } } $methodNodeBuilder->addStmts($methodObject->getBodyStmts()); $methodNode = $methodNodeBuilder->getNode(); $methodNode->type = $methodObject->getModifiers(); $methodNode->setAttribute('startLine', $methodObject->getStartLine()); $methodNode->setAttribute('endLine', $methodObject->getEndLine()); $methodObject->updateParamTags(); $this->addCommentAttributes($methodObject, $methodNode); return $methodNode; }