/** * Creates new presenter instance. * * @param string presenter class name * @return Application\IPresenter */ public function createPresenter($class) { $callInjects = $this->alwaysCallInjects; $services = array_keys($this->container->findByTag('nette.presenter'), $class); if (count($services) > 1) { throw new Application\InvalidPresenterException("Multiple services of type {$class} found: " . implode(', ', $services) . '.'); } elseif (count($services)) { $presenter = $this->container->createService($services[0]); $callInjects = FALSE; } elseif (count($services = $this->container->findByType($class)) === 1) { $presenter = $this->container->createService($services[0]); } else { $presenter = $this->container->createInstance($class); $callInjects = TRUE; } if (!$presenter instanceof Application\IPresenter) { throw new UnexpectedValueException("Unable to create create presenter, returned value is not Nette\\Application\\IPresenter type."); } if ($callInjects) { $this->container->callInjects($presenter); } if ($presenter instanceof Application\UI\Presenter && $presenter->invalidLinkMode === NULL) { $presenter->invalidLinkMode = $this->invalidLinkMode; } return $presenter; }
public function createComponent($name) { if (isset($this->registry[$name])) { $component = $this->container->createService($this->registry[$name]); $this->onCreateComponent($component); return $component; } }
/** * Creates new presenter instance. * @param string presenter name * @return IPresenter */ public function createPresenter($name) { $class = $this->getPresenterClass($name); if (count($services = $this->container->findByType($class)) === 1) { $presenter = $this->container->createService($services[0]); } else { $presenter = $this->container->createInstance($class); } $this->container->callInjects($presenter); if ($presenter instanceof UI\Presenter && $presenter->invalidLinkMode === NULL) { $presenter->invalidLinkMode = $this->container->parameters['debugMode'] ? UI\Presenter::INVALID_LINK_WARNING : UI\Presenter::INVALID_LINK_SILENT; } return $presenter; }
/** * Create a new repository instance for an entity class. * * @param \Doctrine\ORM\EntityManagerInterface $entityManager The EntityManager instance. * @param Doctrine\ORM\Mapping\ClassMetadata $metadata * @return Doctrine\Common\Persistence\ObjectRepository */ private function createRepository(EntityManagerInterface $entityManager, Doctrine\ORM\Mapping\ClassMetadata $metadata) { $defaultRepository = $entityManager->getConfiguration()->getDefaultRepositoryClassName(); $repositoryClassName = $metadata->customRepositoryClassName ?: $defaultRepository; if ($repositoryClassName === $defaultRepository) { return new $repositoryClassName($entityManager, $metadata); } elseif (!($services = $this->serviceLocator->findByType($repositoryClassName))) { // todo: solve me in future, maybe just throw an exception? return new $repositoryClassName($entityManager, $metadata); } elseif (count($services) > 1) { // todo: solve me in future, maybe just throw an exception? return new $repositoryClassName($entityManager, $metadata); } else { return $this->serviceLocator->createService($services[0], array('entityManager' => $entityManager, 'metadata' => $metadata)); } }
/** * @return Nette\Application\IPresenter */ public function __invoke($class) { $services = array_keys($this->container->findByTag('nette.presenter'), $class); if (count($services) > 1) { throw new Nette\Application\InvalidPresenterException("Multiple services of type {$class} found: " . implode(', ', $services) . '.'); } elseif (!$services) { if ($this->touchToRefresh) { touch($this->touchToRefresh); } $presenter = $this->container->createInstance($class); $this->container->callInjects($presenter); if ($presenter instanceof Nette\Application\UI\Presenter && $presenter->invalidLinkMode === NULL) { $presenter->invalidLinkMode = $this->invalidLinkMode; } return $presenter; } return $this->container->createService($services[0]); }
/** * @param ActiveRow $activeRow * @param $tableName * @throws InvalidStateException * @return HyperRow */ public function createRow(ActiveRow $activeRow, $tableName) { $className = Helpers::substituteClassWildcard($this->rowMapping, $tableName); $baseClass = HyperRow::class; if (!class_exists($className) || !is_subclass_of($className, $baseClass)) { throw new InvalidStateException("HyperRow class {$className} does not exist or does not extend {$baseClass}."); } $names = $this->container->findByType($className); if (count($names) > 1) { throw new InvalidStateException("Multiple services of type {$className} found: " . implode(', ', $names) . '.'); } elseif (count($names) == 0) { $inst = $this->container->createInstance($className); } else { $name = array_shift($names); $inst = $this->container->createService($name); } /** @var HyperRow $inst */ $inst->setFactory($this); $inst->setActiveRow($activeRow); return $inst; }
/** * Creates new presenter instance. * @param string presenter name * @return IPresenter */ public function createPresenter($name) { $class = $this->getPresenterClass($name); $services = array_keys($this->container->findByTag('nette.presenter'), $class); if (count($services) > 1) { throw new InvalidPresenterException("Multiple services of type {$class} found: " . implode(', ', $services) . '.'); } elseif (!$services) { if ($this->autoRebuild) { $rc = new \ReflectionClass($this->container); @unlink($rc->getFileName()); // @ file may not exists } $presenter = $this->container->createInstance($class); $this->container->callInjects($presenter); if ($presenter instanceof UI\Presenter && $presenter->invalidLinkMode === NULL) { $presenter->invalidLinkMode = $this->container->parameters['debugMode'] ? UI\Presenter::INVALID_LINK_WARNING : UI\Presenter::INVALID_LINK_SILENT; } return $presenter; } return $this->container->createService($services[0]); }