Example #1
0
 public function __construct(ClassScanner $classScanner, DirectoryScanner $directoryScanner)
 {
     $this->classScanner = $classScanner;
     $this->directoryScanner = $directoryScanner;
     
     $currentScannerClass = $classScanner;
     
     while ($currentScannerClass && $currentScannerClass->hasParentClass()) {
         $currentParentClassName = $currentScannerClass->getParentClass(); 
         //$this->parentClassScanners[$currentParentClassName] = null;
         if ($directoryScanner->hasClass($currentParentClassName)) {
             $currentParentClass = $directoryScanner->getClass($currentParentClassName);
             $this->parentClassScanners[$currentParentClassName] = $currentParentClass;
             $currentScannerClass = $currentParentClass;
         } else {
             $currentScannerClass = false;
         }
     }
     
     foreach ($interfaces = $this->classScanner->getInterfaces() as $iName) {
         if ($directoryScanner->hasClass($iName)) {
             $this->interfaceClassScanners[$iName] = $directoryScanner->getClass($iName);
         }
     }
     
     
 }
 /**
  * 
  * @param string $class
  * @param array $config
  * @return ClassAnnotationHolder
  */
 public function parse($class, array $config = array())
 {
     $annotationManager = new AnnotationManager();
     $parser = new DoctrineAnnotationParser();
     $parser->registerAnnotation(Route::class);
     $parser->registerAnnotation(Service::class);
     $parser->registerAnnotation(Controller::class);
     $parser->registerAnnotation(ControllerPlugin::class);
     $parser->registerAnnotation(Filter::class);
     $parser->registerAnnotation(FormElement::class);
     $parser->registerAnnotation(Hydrator::class);
     $parser->registerAnnotation(InputFilter::class);
     $parser->registerAnnotation(LogProcessor::class);
     $parser->registerAnnotation(LogWriter::class);
     $parser->registerAnnotation(Route::class);
     $parser->registerAnnotation(RoutePlugin::class);
     $parser->registerAnnotation(Serializer::class);
     $parser->registerAnnotation(Validator::class);
     $parser->registerAnnotation(ViewHelper::class);
     $annotationManager->attach($parser);
     $scanner = new DirectoryScanner('.');
     $class = $scanner->getClass($class);
     $eventManager = new EventManager();
     $parser = new ClassParser($config, $annotationManager, $eventManager);
     return $this->handleClassAnnotations($parser->parseClass($class), $config);
 }
Example #3
0
 /**
  * Return the parameters for a method
  * 
  * 3 item array:
  *     #1 - Class name, string if it exists, else null
  *     #2 - Optional?, boolean
  *     #3 - Instantiable, boolean if class exists, otherwise null
  * 
  * @return array 
  */
 public function compileScannerInjectionMethodParmeters(MethodScanner $methodScanner, $introspectionType)
 {
     $params = array();
     $parameterScanners = $methodScanner->getParameters(true);
     
     // rules according to type
     $rules = $this->getIntrospectionRuleset()->getRules($introspectionType);
     
     /* @var $p Zend\Code\Scanner\ParameterScanner */
     foreach ($parameterScanners as $p) {
         
         $paramName = $p->getName();
         
         // create array for this parameter
         $params[$paramName] = array();
         
         // get name, and class if it exists
         $pcName = $p->getClass();
         if ($this->directoryScanner->hasClass($pcName)) {
             $pc = $this->directoryScanner->getClass($pcName);
         }
         
         if ($pcName) {
             // @todo Should we throw an exception if its an unknown type?
             $params[$paramName][] = $pcName;
         } else {
             $params[$paramName][] = null;
         }
         
         if ($introspectionType == IntrospectionRuleset::TYPE_SETTER && $rules['paramCanBeOptional']) {
             $params[$paramName][] = true;
         } else {
             $params[$paramName][] = $p->isOptional(); 
         }
         
         if (isset($pc)) {
             $params[$paramName][] = ($pc->isInstantiable()) ? true : false;
         } else {
             $params[$paramName][] = null;
         }
         
     }
     return $params;
 }