/** * Returns mPDF object * @return mPDFExtended */ public function getMPDF() { if(!$this->mPDF instanceof mPDF) { if($this->createMPDF instanceof Callback && $this->createMPDF->isCallable()) { $mpdf = $this->createMPDF->invoke($this); if(!($mpdf instanceof \mPDF)) { throw new \Nette\InvalidStateException("Callback function createMPDF must return mPDF object!"); } $this->mPDF = $mpdf; }else throw new \Nette\InvalidStateException("Callback createMPDF is not callable or is not instance of Nette\Callback!"); } return $this->mPDF; }
private function resolveClass($name, $recursive = array()) { if (isset($recursive[$name])) { throw new Nette\InvalidArgumentException('Circular reference detected for services: ' . implode(', ', array_keys($recursive)) . '.'); } $recursive[$name] = TRUE; $def = $this->definitions[$name]; $factory = $this->normalizeEntity($this->expand($def->factory->entity)); if ($def->class) { return $def->class; } elseif (is_array($factory)) { // method calling if ($service = $this->getServiceName($factory[0])) { if (Strings::contains($service, '\\')) { // @\Class throw new ServiceCreationException("Unable resolve class name for service '{$name}'."); } $factory[0] = $this->resolveClass($service, $recursive); if (!$factory[0]) { return; } } $factory = new Nette\Callback($factory); if (!$factory->isCallable()) { throw new Nette\InvalidStateException("Factory '{$factory}' is not callable."); } try { $reflection = $factory->toReflection(); $def->class = preg_replace('#[|\\s].*#', '', $reflection->getAnnotation('return')); if ($def->class && !class_exists($def->class) && $def->class[0] !== '\\' && $reflection instanceof \ReflectionMethod) { $def->class = $reflection->getDeclaringClass()->getNamespaceName() . '\\' . $def->class; } } catch (\ReflectionException $e) { } } elseif ($service = $this->getServiceName($factory)) { // alias or factory if (Strings::contains($service, '\\')) { // @\Class $def->autowired = FALSE; return $def->class = $service; } if ($this->definitions[$service]->shared) { $def->autowired = FALSE; } return $def->class = $this->resolveClass($service, $recursive); } else { return $def->class = $factory; // class name } }