/** * Retrieve instance type with interception processing * * @param string $instanceName * @return string */ public function getInstanceType($instanceName) { $type = parent::getInstanceType($instanceName); if ($this->interceptionConfig && $this->interceptionConfig->hasPlugins($instanceName) && $this->interceptableValidator->validate($instanceName)) { return $type . '\\Interceptor'; } return $type; }
/** * Get intercepted class names * * @param array $classes * @param array $interceptedEntities * @return array */ public function collectEntities(array $classes, array $interceptedEntities = []) { $output = []; foreach ($classes as $class) { foreach ($interceptedEntities as $interceptorClass) { $interceptedEntity = substr($interceptorClass, 0, -12); if (is_subclass_of($class, $interceptedEntity) && $this->interceptableValidator->validate($class)) { $reflectionClass = new \ReflectionClass($class); if (!$reflectionClass->isAbstract() && !$reflectionClass->isFinal()) { $output[] = $class . '\\Interceptor'; } } } } $output = array_merge($this->filterOutAbstractClasses($interceptedEntities), $output); $output = array_unique($output); return $output; }
/** * Get intercepted instances from defined class list * * @param array $definedClasses * @return array */ private function getInterceptedClasses($definedClasses) { $intercepted = []; foreach ($definedClasses as $definedClass) { if ($this->interceptionConfig->hasPlugins($definedClass) && $this->typeReader->isConcrete($definedClass) && $this->interceptableValidator->validate($definedClass)) { $intercepted[] = $definedClass; } } return $intercepted; }