Contributte/console – nedaří se registrovat do kontejneru

MartinVolenec
Člen | 36
+
0
-

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.

F.Vesely
Člen | 368
+
+1
-

Mozna se ti spatne detekuje CLI mode, zkus v configu dat misto %consoleMode% jen true

MartinVolenec
Člen | 36
+
0
-

F.Vesely napsal(a):

Mozna se ti spatne detekuje CLI mode, zkus v configu dat misto %consoleMode% jen true

Děkuji za snahu, ale bohužel tím to není. Stále stejná chyba (cache smazána, dump-autoload taktéž).

nightfish
Člen | 472
+
0
-

@MartinVolenec V jakém souboru máš uvedenou tu registraci extension? Načítáš tento soubor do Configuratoru přes addConfig()?

MartinVolenec
Člen | 36
+
0
-

nightfish napsal(a):

@MartinVolenec V jakém souboru máš uvedenou tu registraci extension? Načítáš tento soubor do Configuratoru přes addConfig()?

Ano, v souboru extensions.neon.

<?php
$configurator->addConfig(__DIR__ . '/config/extensions.neon');
?>
nightfish
Člen | 472
+
0
-

@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
+
0
-

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
+
0
-

Doporučuju si projít ukázkou integraci Nettrine https://github.com/…ter/nettrine

MartinVolenec
Člen | 36
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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í!

Tomas8698
Člen | 109
+
0
-

@Mistrfilda zdravim mozem sa opytat ktory riadok je potrebne vymazat? Riesim akurat tento problem a link na github uz nie je aktualny

Gappa
Nette Blogger | 199
+
0
-

Čistě teoreticky to byl tento řádek/parametr: