Dibi a nette 2.1 – Service ‚dibi‘ not found

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
microcz
Člen | 62
+
0
-

Ahoj opět se omlouvám za začátečnický dotaz, ale můžete mě zase nakoupnout? :)

Dibi mám přiloženo v projektu, konfigurace je následující:

config.neon :

parameters:

php:
  date.timezone: Europe/Prague
  # zlib.output_compression: yes
nette:
  application:
    errorPresenter: Error
    mapping:
      *: App\*Module\Presenters\*Presenter
  session:
    expiration: 14 days
extensions:
  dibi: DibiNette21Extension
dibi:
  host: localhost
  username: root
  database: test
  lazy: TRUE
services:
  - App\Model\UserManager
  - App\Model\BundleManager(%wwwDir%)
  - App\RouterFactory
  router: @App\RouterFactory::createRouter

HomepagePresenter.php

class HomepagePresenter extends BasePresenter {

  /** @var DibiConnection */
  private $db;

  protected function startup() {
    parent::startup();
    $this->db = $this->context->dibi->connection;
  }

   ...
}

Chybová hláška:

File: …/vendor/nette/nette/Nette/DI/Container.php:148
source:
throw new MissingServiceException(„Service ‚$name‘ not found.“);
call stack:
$this->db = $this->context->dibi->connection;

Šaman
Člen | 2666
+
+2
-

Zruš ten startup, takhle už se dnes závislosti z kontejneru netahají. A injectni si to takto:

<?php
class HomepagePresenter extends BasePresenter {

  /** @var DibiConnection @inject */
  public $db;
?>

Pozor, pokud injectuješ pomocí anotace, musí být property public! Tento způsob automaticky funguje jen v presenterech (kde se taky dá překousnout ta public property), jinde použij konstruktor (když uvedeš celou třídu parametru konstruktoru, tak se ti Nette bude snažit dodat vhodnout službu z kontejneru).