Dibi a nette 2.1 – Service ‚dibi‘ not found
- microcz
- Člen | 62
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
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).