Kdyby/Console Quickstart problem

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

Zdravim, predesilam, ze s PHP, Nette, Kdyby/Console zacinam, tak prosim nekamenovat:-). Potreboval bych rozchodit Kdyby/Console pod Nette. Co jsem provedl:

nainstaloval Nette sandbox (dle quickstart pomoci composer)
nainstaloval Kdyby/Console (dle popisu na githubu, pomoci composer require)
zaregistroval extension, url v neon.config
zkusil spustit php index.php, console se spustila, vypsaly se zakladni informace (usage, options, available commands )
potud ok pote jsem se snazil pridat vlastni command dle quickstartu na githubu:

vytvoreni SendNewslettersCommand.php
zaregistrovani services sendNewslettersCommand v neon.configu
pri spusteni se vypise do logu nasledujici hlaska:
Nette\DI\ServiceCreationException: Class App\Console\SendNewslettersCommand used in service ‘sendNewslettersCommand’ not found or is not instantiable in ........./test1/vendor/nette/di/src/DI/ContainerBuilder.php:476 @ CLI: index.php .......

jinymi slovy danou tridu nelze nalezt. uz se s tim nejakou dobu trapim, googlim, snazim se pochpit jednolive casti jak funguji, ale zatim nic a za kazde nakopnuti spravnym smerem budu rad. predpokladam, ze soubor s commandem neni ulozen na spravne ceste, aby se nasel, ale uz jsem ho zkousel dat vsude mozne a nic :-(

ali
Člen | 342
+
0
-

A mas ten command spravne zaregistrovany v configu?

services:
	command.1:
		class: Name\Space\Command
		arguments: [...]
		tags: [kdyby.console.command]

Dulezite je mit ten commant tagnuty na kdyby.console.command

xan1203
Člen | 5
+
0
-

V konfigu ho mam zapsan dle navodu na githubu (tedy stejne tak jak pises), tak tam mam. tady bude problem, ze ten command neni nalezeny autoloaderem. otazka tedy je, kam by se mel soubor s commandem spravne ulozit, presneji do jake cesty v pripade, ze namespace je dle githubu „namespace App\Console“ a jak by se mela pripadne upravit konfigurace (ci cokoliv jineho) aby ho autoloader nasel.

Myiyk
Člen | 321
+
0
-

@xan1203 Namespace může být jakékoliv.
V souboru app/bootstrap.php je nastavení robot loaderu.
V základním nastavení se načítá jen složka app.

Načítání věcí z vendor dělá composer sám. A většinou při instalaci vygeneruje tzv. mapy, kde se co nachází. Takže pokud přidáš třídu do vendor, composer ji nenajde.

Editoval Myiyk (2. 1. 2016 9:44)

xan1203
Člen | 5
+
0
-

soubor s commandem mam umisteny ve slozce app/command a v ni soubor SendNewslettersCommand.php. Zeptam se jeste, jestli nekdo nema k dispozici odkaz, pripadne nejaky priklad na step-by-step zprovozneni kdyby/console pro UB (kdo nezna UB = uplny blbec).

F.Vesely
Člen | 368
+
+3
-
  1. Stahnu Nette\Sandbox

    composer create-project nette/sandbox test

  2. Stahnu Kdyby\Console

    composer require kdyby/console

  3. Do app/command/TestCommand.php napisu
<?php
namespace App\Console;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class TestCommand extends Command
{
    protected function configure()
    {
        $this->setName('app:test');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $output->writeLn('Test Command');
        return 0;
    }
}
  1. Extension a TestCommand zaregistruji v config.neon
extensions:
	console: Kdyby\Console\DI\ConsoleExtension

console:
	commands:
		- App\Console\TestCommand
  1. Spustim TestCommand pres CLI

    php www/index.php app:test

xan1203
Člen | 5
+
0
-

Dekuji mnohokrate, vse jsem smazal, provedl vyse popsane kroky a hle vse funguje. Problem byl evidentne nekde mezi klavesnici a zidli…
Jeste jednou diky.

reflex
Člen | 28
+
+1
-

Narazil jsem na stejny problem, opravil jsem to tim, ze jsem smazal temp/cache rucne