Ejemplo n.º 1
0
 /**
  * fromReflection() - build a Code Generation PHP Object from a Class Reflection
  *
  * @param Zend_Reflection_Class $reflectionClass
  * @return dmZendCodeGeneratorPhpClass
  */
 public static function fromReflection(Zend_Reflection_Class $reflectionClass)
 {
     $class = new self();
     $class->setSourceContent($class->getSourceContent());
     $class->setSourceDirty(false);
     if ($reflectionClass->getDocComment() != '') {
         $class->setDocblock(Zend_CodeGenerator_Php_Docblock::fromReflection($reflectionClass->getDocblock()));
     }
     $class->setAbstract($reflectionClass->isAbstract());
     $class->setName($reflectionClass->getName());
     if ($parentClass = $reflectionClass->getParentClass()) {
         $class->setExtendedClass($parentClass->getName());
         $interfaces = array_diff($parentClass->getInterfaces(), $reflectionClass->getInterfaces());
     } else {
         $interfaces = $reflectionClass->getInterfaces();
     }
     $class->setImplementedInterfaces($interfaces);
     $properties = array();
     foreach ($reflectionClass->getProperties() as $reflectionProperty) {
         if ($reflectionProperty->getDeclaringClass()->getName() == $class->getName()) {
             $properties[] = Zend_CodeGenerator_Php_Property::fromReflection($reflectionProperty);
         }
     }
     $class->setProperties($properties);
     $methods = array();
     foreach ($reflectionClass->getMethods(-1, 'dmZendReflectionMethod') as $reflectionMethod) {
         if ($reflectionMethod->getDeclaringClass()->getName() == $class->getName()) {
             $methods[] = dmZendCodeGeneratorPhpMethod::fromReflection($reflectionMethod);
         }
     }
     $class->setMethods($methods);
     return $class;
 }
Ejemplo n.º 2
0
 public function testPropertyReturns()
 {
     $reflectionClass = new Zend_Reflection_Class('Zend_Reflection_TestSampleClass2');
     $propertyByName = $reflectionClass->getProperty('_prop1');
     $this->assertEquals('Zend_Reflection_Property', get_class($propertyByName));
     $propertiesAll = $reflectionClass->getProperties();
     $this->assertEquals(2, count($propertiesAll));
     $firstProperty = array_shift($propertiesAll);
     $this->assertEquals('_prop1', $firstProperty->getName());
 }
Ejemplo n.º 3
0
 protected function _getProperties()
 {
     $propertyArray = array();
     $class = new Zend_Reflection_Class($this);
     $properties = $class->getProperties();
     foreach ($properties as $property) {
         if ($property->isPublic()) {
             $propertyArray[] = $property->getName();
         }
     }
     return $propertyArray;
 }
Ejemplo n.º 4
0
 public function InjectDependencies($object)
 {
     $reflectionClass = new \Zend_Reflection_Class($object);
     //$reflectionProperty = new \Zend_Reflection_Property(null, null);
     foreach ($reflectionClass->getProperties() as $reflectionProperty) {
         /** @var \Zend_Reflection_Property $reflectionProperty */
         $reflectionDocComment = $reflectionProperty->getDocComment();
         if ($reflectionDocComment) {
             if ($reflectionDocComment->hasTag("Inject")) {
                 $reflectionDocCommentTag = $reflectionDocComment->getTag("Inject");
                 $dependencyName = $reflectionDocCommentTag->getDescription();
                 $dependency = $this->kernel->Get($dependencyName);
                 $reflectionProperty->setAccessible(true);
                 $reflectionProperty->setValue($object, $dependency);
             }
         }
     }
     //print_r($reflectionClass);
 }
Ejemplo n.º 5
0
 /**
  * Takes care of injecting controller dependencies
  * into the controller at runtime.
  */
 public function preDispatch()
 {
     $actionController = $this->getActionController();
     $r = new Zend_Reflection_Class($actionController);
     $properties = $r->getProperties();
     foreach ($properties as $property) {
         if ($property->getDeclaringClass()->getName() == get_class($actionController)) {
             if ($property->getDocComment() && $property->getDocComment()->hasTag('InjectService')) {
                 $tag = $property->getDocComment()->getTag('InjectService');
                 if ($tag->getDescription()) {
                     $sc = Zend_Registry::get('sc');
                     $service = $sc->getService(trim(lcfirst($tag->getDescription())));
                     $property->setAccessible(true);
                     $property->setValue($actionController, $service);
                 } else {
                     throw new Exception("No service key given");
                 }
             }
         }
     }
 }
 /**
  * Check for dependencies and inject them if needed.
  */
 protected function setUp()
 {
     parent::setUp();
     if (Zend_Registry::isRegistered(LoSo_Zend_Application_Bootstrap_SymfonyContainerBootstrap::getRegistryIndex()) && ($container = Zend_Registry::get(LoSo_Zend_Application_Bootstrap_SymfonyContainerBootstrap::getRegistryIndex())) instanceof \Symfony\Component\DependencyInjection\ContainerInterface) {
         $r = new Zend_Reflection_Class($this);
         $properties = $r->getProperties();
         foreach ($properties as $property) {
             if ($property->getDocComment() && $property->getDocComment()->hasTag('Inject')) {
                 $injectTag = $property->getDocComment()->getTag('Inject');
                 $serviceName = $injectTag->getDescription();
                 if (empty($serviceName)) {
                     $serviceName = $this->_formatServiceName($property->getName());
                 }
                 if ($container->has($serviceName)) {
                     $property->setAccessible(true);
                     $property->setValue($this, $container->get($serviceName));
                 }
             }
         }
     }
 }
Ejemplo n.º 7
0
 /**
  * Method scan given object for properties which has public getters
  * and generate array of entities-replacements pairs from this method
  * @param $object Object
  * @param $namespace Custom namespace for replacements
  * @return Tools_Content_EntityParser Return self for chaining
  * @throws Exceptions_SeotoasterException
  */
 public function objectToDictionary($object, $namespace = null)
 {
     if (!is_object($object)) {
         throw new Exceptions_SeotoasterException('Given variable must be an object');
     }
     $reflection = new Zend_Reflection_Class($object);
     $dictionary = array();
     foreach ($reflection->getProperties() as $prop) {
         $normalizedPropName = join('', array_map('ucfirst', explode('_', $prop->getName())));
         $getter = 'get' . join('', array_map('ucfirst', explode('_', $prop->getName())));
         if ($reflection->hasMethod($getter)) {
             $replacement = $object->{$getter}();
             $className = empty($namespace) ? preg_replace('/.*_([\\w\\d]*)$/', '$1', $reflection->getName()) : $namespace;
             $entityName = strtolower($className . ':' . $normalizedPropName);
             if (!is_array($replacement) && !is_object($replacement)) {
                 $dictionary[$entityName] = $replacement;
             }
         }
     }
     $this->addToDictionary($dictionary);
     return $this;
 }
Ejemplo n.º 8
0
 /**
  * Generate map of public class attributes
  * 
  * @param  string $typename type name
  * @param  DOMElement $typexml target XML element 
  * @return void
  */
 protected function _addClassAttributes($typename, DOMElement $typexml)
 {
     // Do not try to autoload here because _phpTypeToAS should
     // have already attempted to load this class
     if (!class_exists($typename, false)) {
         return;
     }
     $rc = new Zend_Reflection_Class($typename);
     foreach ($rc->getProperties() as $prop) {
         if (!$prop->isPublic()) {
             continue;
         }
         $propxml = $this->_xml->createElement('property');
         $propxml->setAttribute('name', $prop->getName());
         $type = $this->_registerType($this->_getPropertyType($prop));
         $propxml->setAttribute('type', $type);
         $typexml->appendChild($propxml);
     }
 }
Ejemplo n.º 9
0
 protected function _getClassAnnotations($class)
 {
     $annotations = array();
     // TODO: Go up to parent classes (let subclasses override tags from parent classes)
     $reflectionClass = new Zend_Reflection_Class($class);
     foreach ($reflectionClass->getProperties() as $property) {
         $docblock = $property->getDocComment();
         if ($docblock) {
             $tags = $docblock->getTags('firephp');
             if ($tags) {
                 foreach ($tags as $tag) {
                     list($name, $value) = $this->_parseAnnotationTag($tag);
                     $annotations['$' . $property->getName()][$name] = $value;
                 }
             }
         }
     }
     return $annotations;
 }
Ejemplo n.º 10
0
 protected function _getClassAnnotations($class)
 {
     $annotations = array();
     // TODO: Go up to parent classes (let subclasses override tags from parent classes)
     try {
         $reflectionClass = new Zend_Reflection_Class($class);
         foreach ($reflectionClass->getProperties() as $property) {
             $docblock = $property->getDocComment();
             if ($docblock) {
                 $tags = $docblock->getTags('insight');
                 if ($tags) {
                     foreach ($tags as $tag) {
                         list($name, $value) = $this->_parseAnnotationTag($tag);
                         $annotations['$' . $property->getName()][$name] = $value;
                     }
                 }
             }
         }
     } catch (Exception $e) {
         // silence errors (Zend_Reflection_Docblock_Tag throws if '@name(..)' tag found)
         // TODO: Optionally show these errors
     }
     return $annotations;
 }