getByTag() публичный Метод

Return list of service tagged with marker
public getByTag ( string $tag ) : array
$tag string Tag to select
Результат array
Пример #1
0
 /**
  * Return list of advices for class
  *
  * @param string|ReflectionClass|ParsedReflectionClass $class Class to advise
  *
  * @return array|Aop\Advice[] List of advices for class
  */
 public function getAdvicesForClass($class)
 {
     $this->loader->loadAdvisorsAndPointcuts();
     $classAdvices = array();
     if (!$class instanceof ReflectionClass && !$class instanceof ParsedReflectionClass) {
         $class = new ReflectionClass($class);
     }
     $parentClass = $class->getParentClass();
     if ($parentClass && preg_match('/' . AspectContainer::AOP_PROXIED_SUFFIX . '$/', $parentClass->name)) {
         $originalClass = $parentClass;
     } else {
         $originalClass = $class;
     }
     foreach ($this->container->getByTag('advisor') as $advisorId => $advisor) {
         if ($advisor instanceof Aop\PointcutAdvisor) {
             $pointcut = $advisor->getPointcut();
             if ($pointcut->getClassFilter()->matches($class)) {
                 $classAdvices = array_merge_recursive($classAdvices, $this->getAdvicesFromAdvisor($originalClass, $advisor, $advisorId, $pointcut));
             }
         }
         if ($advisor instanceof Aop\IntroductionAdvisor) {
             if ($advisor->getClassFilter()->matches($class)) {
                 $classAdvices = array_merge_recursive($classAdvices, $this->getIntroductionFromAdvisor($originalClass, $advisor, $advisorId));
             }
         }
     }
     return $classAdvices;
 }
Пример #2
0
 /**
  * Returns list of unloaded aspects in the container
  *
  * @return array|Aspect[]
  */
 public function getUnloadedAspects()
 {
     $unloadedAspects = [];
     foreach ($this->container->getByTag('aspect') as $aspect) {
         if (!isset($this->loadedAspects[get_class($aspect)])) {
             $unloadedAspects[] = $aspect;
         }
     }
     return $unloadedAspects;
 }
Пример #3
0
 /**
  * Load pointcuts into container
  *
  * There is no need to always load pointcuts, so we delay loading
  */
 public function loadAdvisorsAndPointcuts()
 {
     $containerResources = $this->container->getResources();
     $resourcesToLoad = array_diff($containerResources, $this->loadedResources);
     if (!$resourcesToLoad) {
         return;
     }
     foreach ($this->container->getByTag('aspect') as $aspect) {
         $ref = new ReflectionClass($aspect);
         if (in_array($ref->getFileName(), $resourcesToLoad)) {
             $this->load($aspect);
         }
     }
     $this->loadedResources = $containerResources;
 }
Пример #4
0
 /**
  * Collects list of advisors from the container
  *
  * @param AspectContainer $aspectContainer Container instance
  *
  * @return Advisor[] List of advisors in the container
  */
 private function loadAdvisorsList(AspectContainer $aspectContainer)
 {
     /** @var AspectLoader $aspectLoader */
     $aspectLoader = $aspectContainer->get('aspect.cached.loader');
     $aspects = $aspectLoader->getUnloadedAspects();
     foreach ($aspects as $aspect) {
         $aspectLoader->loadAndRegister($aspect);
     }
     $advisors = $aspectContainer->getByTag('advisor');
     return $advisors;
 }