Ahoj, snažím se rozchodit migrace a ty zase potřebují Kdyby/Console.
Dokud jsem měl funkční databázi, tak všechno fungovalo, ale teď zkouším
spustit konzoli i když v databázi nemám žádná data. A při zadání
$ php www/index.php
mi to vyhodí hlášku, že neexistuje tabulka
role
, ke které se zkouší připojit Authorizator. Index.php
i bootstrap mám standardní, tam se o žádnou autorizaci nepokouším.
Tušíte někdo, v čem by mohla být chyba? Resp. kdy přesně se rozhodne,
jestli má naběhnout konzole, nebo běžné spuštění aplikace? Díky.
This question was answered by Šaman, you can jump directly to the answer
Kdyby\Console se nahackuje do routeru (za předpokladu, že zaregistruješ ConsoleExtension) a předřadí mu vlastní, který všechny požadavky z CLI směřuje na Kdyby:Cli presenter, tam se pak spustí console application. Pozor na to, že CLI defaultně běží v produkčním režimu, takže není od věci nejdřív smazat cache. Jinak mě na takhle obecně položenou otázku nic lepšího nenapadá…
Aha, díky za odpověď. Myslel jsem, že se mi nějak spouštěly aplikačni presentery, ale nakonec byla chyba jinde. Můj autorizátor si už v konstruktoru z databáze načítá seznam rolí, takže se to asi zaseklo už během sestavování kontejneru.
Záhadou mi zůstává, proč funguje samostatný skript migrací, který si také nechá bootstrapem sestavit kontejner a bere si pak z něho připojení k databázi. Napadá mě jen, jestli kontejner není lazy a nevytváři konkrétní instance až na vyžádání – ten scipt migrací chce opravdu jen instanci connection, zatímco konzole vytváři presenter, ten chce uživatele a ten zase autorizátor.
Dodatek: Ano, ta chyba má opravdu v řetězci PresenterFactory a spadne to
při vytváření presenteru. Pokud tedy není možné vytvořit (třeba bez
databáze) ani obecný Nette\Application\UI\Presenter
, tak konzole
nenaběhne.