本文整理汇总了PHP中Nette\DI\Container::createService方法的典型用法代码示例。如果您正苦于以下问题:PHP Container::createService方法的具体用法?PHP Container::createService怎么用?PHP Container::createService使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Nette\DI\Container
的用法示例。
在下文中一共展示了Container::createService方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: createPresenter
/**
* 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;
}
示例2: createComponent
public function createComponent($name)
{
if (isset($this->registry[$name])) {
$component = $this->container->createService($this->registry[$name]);
$this->onCreateComponent($component);
return $component;
}
}
示例3: createPresenter
/**
* 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;
}
示例4: createRepository
/**
* 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));
}
}
示例5: __invoke
/**
* @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]);
}
示例6: createRow
/**
* @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;
}
示例7: createPresenter
/**
* 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]);
}