Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ClassGenerator.php
Go to the documentation of this file.
1 <?php
7 
8 use Zend\Code\Generator\MethodGenerator;
9 use Zend\Code\Generator\PropertyGenerator;
10 
11 class ClassGenerator extends \Zend\Code\Generator\ClassGenerator implements
12  \Magento\Framework\Code\Generator\CodeGeneratorInterface
13 {
19  protected $_docBlockOptions = [
20  'shortDescription' => 'setShortDescription',
21  'longDescription' => 'setLongDescription',
22  'tags' => 'setTags',
23  ];
24 
30  protected $_propertyOptions = [
31  'name' => 'setName',
32  'const' => 'setConst',
33  'static' => 'setStatic',
34  'visibility' => 'setVisibility',
35  'defaultValue' => 'setDefaultValue',
36  ];
37 
43  protected $_methodOptions = [
44  'name' => 'setName',
45  'final' => 'setFinal',
46  'static' => 'setStatic',
47  'abstract' => 'setAbstract',
48  'visibility' => 'setVisibility',
49  'body' => 'setBody',
50  'returntype' => 'setReturnType'
51  ];
52 
58  protected $_parameterOptions = [
59  'name' => 'setName',
60  'type' => 'setType',
61  'defaultValue' => 'setDefaultValue',
62  'passedByReference' => 'setPassedByReference',
63  'variadic' => 'setVariadic',
64  ];
65 
72  protected function _setDataToObject($object, array $data, array $map)
73  {
74  foreach ($map as $arrayKey => $setterName) {
75  if (isset($data[$arrayKey])) {
76  $object->{$setterName}($data[$arrayKey]);
77  }
78  }
79  }
80 
87  public function setClassDocBlock(array $docBlock)
88  {
89  $docBlockObject = new \Zend\Code\Generator\DocBlockGenerator();
90  $docBlockObject->setWordWrap(false);
91  $this->_setDataToObject($docBlockObject, $docBlock, $this->_docBlockOptions);
92 
93  return parent::setDocBlock($docBlockObject);
94  }
95 
102  public function addMethods(array $methods)
103  {
104  foreach ($methods as $methodOptions) {
105  $methodObject = $this->createMethodGenerator();
106  $this->_setDataToObject($methodObject, $methodOptions, $this->_methodOptions);
107 
108  if (isset(
109  $methodOptions['parameters']
110  ) && is_array(
111  $methodOptions['parameters']
112  ) && count(
113  $methodOptions['parameters']
114  ) > 0
115  ) {
116  $parametersArray = [];
117  foreach ($methodOptions['parameters'] as $parameterOptions) {
118  $parameterObject = new \Zend\Code\Generator\ParameterGenerator();
119  $this->_setDataToObject($parameterObject, $parameterOptions, $this->_parameterOptions);
120  $parametersArray[] = $parameterObject;
121  }
122 
123  $methodObject->setParameters($parametersArray);
124  }
125 
126  if (isset($methodOptions['docblock']) && is_array($methodOptions['docblock'])) {
127  $docBlockObject = new \Zend\Code\Generator\DocBlockGenerator();
128  $docBlockObject->setWordWrap(false);
129  $this->_setDataToObject($docBlockObject, $methodOptions['docblock'], $this->_docBlockOptions);
130 
131  $methodObject->setDocBlock($docBlockObject);
132  }
133 
134  if (!empty($methodOptions['returnType'])) {
135  $methodObject->setReturnType($methodOptions['returnType']);
136  }
137 
138  $this->addMethodFromGenerator($methodObject);
139  }
140  return $this;
141  }
142 
150  public function addMethodFromGenerator(MethodGenerator $method)
151  {
152  if (!is_string($method->getName())) {
153  throw new \InvalidArgumentException('addMethodFromGenerator() expects string for name');
154  }
155 
156  return parent::addMethodFromGenerator($method);
157  }
158 
166  public function addProperties(array $properties)
167  {
168  foreach ($properties as $propertyOptions) {
169  $propertyObject = new PropertyGenerator();
170  $this->_setDataToObject($propertyObject, $propertyOptions, $this->_propertyOptions);
171 
172  if (isset($propertyOptions['docblock'])) {
173  $docBlock = $propertyOptions['docblock'];
174  if (is_array($docBlock)) {
175  $docBlockObject = new \Zend\Code\Generator\DocBlockGenerator();
176  $docBlockObject->setWordWrap(false);
177  $this->_setDataToObject($docBlockObject, $docBlock, $this->_docBlockOptions);
178  $propertyObject->setDocBlock($docBlockObject);
179  }
180  }
181 
182  $this->addPropertyFromGenerator($propertyObject);
183  }
184 
185  return $this;
186  }
187 
195  public function addPropertyFromGenerator(PropertyGenerator $property)
196  {
197  if (!is_string($property->getName())) {
198  throw new \InvalidArgumentException('addPropertyFromGenerator() expects string for name');
199  }
200 
201  return parent::addPropertyFromGenerator($property);
202  }
203 
209  protected function createMethodGenerator()
210  {
211  return new MethodGenerator();
212  }
213 
217  public function getNamespaceName()
218  {
219  return ltrim(parent::getNamespaceName(), '\\') ?: null;
220  }
221 }
_setDataToObject($object, array $data, array $map)
$methods
Definition: billing.phtml:71
$method
Definition: info.phtml:13
$properties
Definition: categories.php:26
addPropertyFromGenerator(PropertyGenerator $property)