Contributte/console – nedaří se registrovat do kontejneru
- MartinVolenec
- Člen | 36
Dobrý den,
snažím se využít a spustit Contributte konzoli (Nette 3.0).
Dle dokumentace jsem pochopil, že pro základní spuštění stačí
následující:
<?php
extensions:
console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
?>
<?php
#!/usr/bin/env php
<?php declare(strict_types = 1);
require __DIR__ . '/../vendor/autoload.php';
exit(App\Bootstrap::boot()
->createContainer()
->getByType(Contributte\Console\Application::class)
->run());
?>
Nicméně nyní v při zadání příkazu bin/console.php (Windows) hlasí Nette následující chybu:
Nette\DI\MissingServiceException: Service of type Contributte\Console\Application not found. in C:\xampp\htdocs\pofelime\vendor\nette\di\src\DI\Container.php
Postupuji dle této dokumentace
Cache jsem mazal, dump-autoload taktéž, dokumentaci přečetl několikrát.
Obsah composer.json
<?php
"require": {
"php": ">=7.4",
"nette/application": "^3.0",
"nette/bootstrap": "^3.0",
"nette/caching": "^3.0",
"nette/database": "^3.0",
"nette/di": "^3.0",
"nette/finder": "^2.5",
"nette/forms": "^3.0",
"nette/http": "^3.0",
"nette/mail": "^3.0",
"nette/robot-loader": "^3.0",
"nette/security": "^3.0",
"nette/utils": "^3.0",
"latte/latte": "^2.5",
"tracy/tracy": "^2.6",
"nettrine/orm": "^0.7.0",
"ramsey/uuid-doctrine": "^1.6",
"contributte/console": "^0.8.0"
},
?>
Nenapadá někoho kde je schovaný háček?
Děkuji předem.
- MartinVolenec
- Člen | 36
F.Vesely napsal(a):
Mozna se ti spatne detekuje CLI mode, zkus v configu dat misto
%consoleMode%
jentrue
Děkuji za snahu, ale bohužel tím to není. Stále stejná chyba (cache smazána, dump-autoload taktéž).
- MartinVolenec
- Člen | 36
nightfish napsal(a):
@MartinVolenec V jakém souboru máš uvedenou tu registraci extension? Načítáš tento soubor do
Configuratoru
přesaddConfig()
?
Ano, v souboru extensions.neon.
<?php
$configurator->addConfig(__DIR__ . '/config/extensions.neon');
?>
- nightfish
- Člen | 517
@MartinVolenec Nevím, nainstaloval jsem si Nette 3 sandbox, do toho konzoli dle odkázaného návodu a funguje to správně.
Pokud by mi to nefungovalo, jako další krok bych se podíval do vygenerovaného DI kontejneru (temp/cache/nette.configurator/Container_*.php), jestli v něm mám vygenerovanou definici služby, která vrací Contributte\Console\Application. Já ji tam mám, vypadá nějak takto:
public function createServiceConsole__application(): Contributte\Console\Application
{
$service = new Contributte\Console\Application;
$service->setCommandLoader($this->getService('console.commandLoader'));
return $service;
}
Kdyby tam nebyla, tak si ještě jednou zkontroluju, jak se mi v Bootstrapu přidávají konfigurační soubory a jestli se opravdu načítají všechny, které potřebuju. Případně bych registraci extension přesunul do jiného konfiguračního souboru, o kterém mám jistotu, že se načítá (např. config.neon, common.neon atd.).
- MartinVolenec
- Člen | 36
nightfish napsal(a):
@MartinVolenec Nevím, nainstaloval jsem si Nette 3 sandbox, do toho konzoli dle odkázaného návodu a funguje to správně.
Pokud by mi to nefungovalo, jako další krok bych se podíval do vygenerovaného DI kontejneru (temp/cache/nette.configurator/Container_*.php), jestli v něm mám vygenerovanou definici služby, která vrací Contributte\Console\Application. Já ji tam mám, vypadá nějak takto:
public function createServiceConsole__application(): Contributte\Console\Application { $service = new Contributte\Console\Application; $service->setCommandLoader($this->getService('console.commandLoader')); return $service; }
Kdyby tam nebyla, tak si ještě jednou zkontroluju, jak se mi v Bootstrapu přidávají konfigurační soubory a jestli se opravdu načítají všechny, které potřebuju. Případně bych registraci extension přesunul do jiného konfiguračního souboru, o kterém mám jistotu, že se načítá (např. config.neon, common.neon atd.).
Začal jsem po tom trochu pídit. Ukázalo se, že to v Contejneru mám:
<?php
public function createServiceConsole__application(): Contributte\Console\Application
{
$service = new Contributte\Console\Application;
$service->setCommandLoader($this->getService('console.commandLoader'));
$service->getHelperSet()->set($this->getService('nettrine.dbal.console.connectionHelper'), 'db');
$service->getHelperSet()->set($this->getService('nettrine.orm.console.entityManagerHelper'),'em');
return $service;
}
?>
A vygeneruje se to i v původním rozdělení Neon souborů.
Možná by chtělo zmínit tyto věci:
PHP 7.4
A projekt používá Doctrine (proto console chci)
Doctrine.neon:
<?php
extensions:
# Common
nettrine.annotations: Nettrine\Annotations\DI\AnnotationsExtension
nettrine.cache: Nettrine\Cache\DI\CacheExtension
# DBAL
nettrine.dbal: Nettrine\DBAL\DI\DbalExtension
nettrine.dbal.console: Nettrine\DBAL\DI\DbalConsoleExtension
# ORM
nettrine.orm: Nettrine\ORM\DI\OrmExtension
nettrine.orm.cache: Nettrine\ORM\DI\OrmCacheExtension
nettrine.orm.console: Nettrine\ORM\DI\OrmConsoleExtension
nettrine.orm.annotations: Nettrine\ORM\DI\OrmAnnotationsExtension
nettrine.dbal:
debug:
panel: %debugMode%
connection:
driver: pdo_pgsql
host: %doctrine.host%
user: %doctrine.user%
password: %doctrine.password%
dbname: %doctrine.dbname%
types:
uuid: Ramsey\Uuid\Doctrine\UuidType
nettrine.orm:
entityManagerDecoratorClass: App\Model\Database\EntityManagerDecorator
nettrine.orm.annotations:
mapping:
App\Model\Database\Entity: %appDir%/Model/Database/Entity
?>
Nemohlo by to mít nějakou spojitost s Doctrine?
- Petr Parolek
- Člen | 455
Doporučuju si projít ukázkou integraci Nettrine https://github.com/…ter/nettrine
- MartinVolenec
- Člen | 36
ppar napsal(a):
Doporučuju si projít ukázkou integraci Nettrine https://github.com/…ter/nettrine
Prošel a zkontroloval jsem vše. To, co mu chybí, ve vygenerovaném
kontejneru je k dispozici, jak jsem již posílal.
Nevím, jak se hnout dál.
Ovládat Doctrine lze jen skrze konzoli…že?
- MartinVolenec
- Člen | 36
MartinVolenec napsal(a):
ppar napsal(a):
Doporučuju si projít ukázkou integraci Nettrine https://github.com/…ter/nettrine
Prošel a zkontroloval jsem vše. To, co mu chybí, ve vygenerovaném kontejneru je k dispozici, jak jsem již posílal.
Nevím, jak se hnout dál.Ovládat Doctrine lze jen skrze konzoli…že?
Aha. Tak já jsem založil web-project.
Nyní jsem to zkusil na sandboxu a vše funguje. Mohu se zeptat proč?
- Mistrfilda
- Člen | 76
Myslím že jsem na to přišel, nechal si v configu po vytvoření přes composer tento řádek? Pokud ano, můžeš ho zkusit smazat, smazat cache a zkusit znovu bin/console?
https://github.com/…/common.neon#L18
Protože jsem to dokázal nasimulovat naprosto přesně, jako to píše tobě. Nikdy jsem ten parametr z konfigurace nepoužil a možná je tam pro začátek dost matoucí, jestli je to ono, zkusim udělat pr který navrhne smazání z web-skeletonu.
Editoval Mistrfilda (24. 7. 2020 20:19)
- MartinVolenec
- Člen | 36
Mistrfilda napsal(a):
Myslím že jsem na to přišel, nechal si v configu po vytvoření přes composer tento řádek? Pokud ano, můžeš ho zkusit smazat, smazat cache a zkusit znovu bin/console?
https://github.com/…/common.neon#L18
Protože jsem to dokázal nasimulovat naprosto přesně, jako to píše tobě. Nikdy jsem ten parametr z konfigurace nepoužil a možná je tam pro začátek dost matoucí, jestli je to ono, zkusim udělat pr který navrhne smazání z web-skeletonu.
Výborně, je to přesně tím.
Bez types funguje.
Pokud types nechám, ale uvedu tam Contributte\Console\Application, tak to taky funguje.
Moc děkuji za vyřešení!