Nový projekt s Composerem a Kdyby\Doctrine vrací Nette\InvalidStateException
- Richard Faila
- Člen | 40
Zdravím
Narazil jsem na zajímavou chybu. Založil jsem si nový projekt přes
Composer: composer create-project nette/sandbox test
Potom jsem přesně podle návodu přidal
Kdyby\Doctrine: composer require kdyby/doctrine:@dev
a podle
dalšího návodu doplnil bootsrap.php:
<?php
Kdyby\Console\DI\ConsoleExtension::register($configurator);
Kdyby\Events\DI\EventsExtension::register($configurator);
Kdyby\Annotations\DI\AnnotationsExtension::register($configurator);
Kdyby\Doctrine\DI\OrmExtension::register($configurator);
?>
Přesto dostávám jen Nette\InvalidStateException
Ambiguous class Doctrine\Tests\DoctrineTestCase resolution; defined in
/var/www/project/ebd/libs/doctrine/inflector/tests/Doctrine/Tests/DoctrineTestCase.php
and in
/var/www/project/ebd/libs/doctrine/collections/tests/Doctrine/Tests/DoctrineTestCase.php
Nějaký nápad, kde by mohl být zakopaný pes?
PHP Version 5.4.6, Nette Framework 2.0.12
- David Matějka
- Moderator | 6445
doctrina stejny classy ve vice projektech, nejlepsi je vypnout robot loader, aby neskenoval /libs slozku, ale pouze /app (najdes to v bootstrap.php)
- David Matějka
- Moderator | 6445
@enumag: jo, vendor je lepsi, bohuzel v nette
sandboxu to dlouho bylo na libs, tak to tak ve spouste projektu zustava :)
ja pro jednoduchy tridy, ktery jsou pouze soucasti aplikace, pouzivam radsi
slozku app/libs
- enumag
- Člen | 2118
@matej21: Vím, taky jsem na to nadával jak špaček. :) Vše co se týká aplikace samozřejmě mám v app, do libs dávám věci typu vlastní shortcut na barDump, což není specifické pro aplikaci.
Editoval enumag (7. 10. 2013 23:31)
- Richard Faila
- Člen | 40
Mě šlo spíš o fakt, že ačkoliv jsem postupoval podle návodu, tak výsledek moc nefungoval.
Když v bootstrap.php
vypnu Robotloader na složce
libs
(PS: zajímalo, jakože to funguje, když tam jsou i soubory
samotného Nette) dostávám pro změněnu hlášku:
Declaration of Kdyby\Doctrine\DI\OrmExtension::afterCompile() should be compatible with that of Nette\Config\CompilerExtension::afterCompile()
- David Matějka
- Moderator | 6445
jo, ten navod je asi pro dev verzi nette. ve stable (2.0) zkus do composeru
dat verzi dev-nette-2.0
misto soucasneho dev-master
(resp. @dev
)
- Filip Procházka
- Moderator | 4668
Ahoj, díky za upozornění, informaci jsem aktualizoval. Příště bych poprosil založit issue na githubu, tam si toho všimnu dříve :)
- David Klouček
- Člen | 57
Taky jsem dostával Ambiguous class
, tak jsem zkoušel rady
vejš a pořád dostávam
Fatal Error Class 'Kdyby\Annotations\DI\AnnotationsExtension' not found
.
Momentálně mám všechny knihovny ve složce projekt/libs a robot
loader zaplej pro projekt/app. Už nevim co s tim, neměl by tam
nějak zafungovat autoloading?
Řádka s errorem:
Kdyby\Annotations\DI\AnnotationsExtension::register($configurator);
- duskohu
- Člen | 778
David Klouček napsal(a):
Taky jsem dostával
Ambiguous class
, tak jsem zkoušel rady vejš a pořád dostávamFatal Error Class 'Kdyby\Annotations\DI\AnnotationsExtension' not found
. Momentálně mám všechny knihovny ve složce projekt/libs a robot loader zaplej pro projekt/app. Už nevim co s tim, neměl by tam nějak zafungovat autoloading?Řádka s errorem:
Kdyby\Annotations\DI\AnnotationsExtension::register($configurator);
Predpokladam ze si neinstaloval cez composer ked to mas vsetko v libs, tak pridaj do robot loadru aj adresar libs. Ale urcite ti odporucam pouzivat composer, velmi si ulahcis pracu.
- David Klouček
- Člen | 57
duskohu napsal(a):
Predpokladam ze si neinstaloval cez composer ked to mas vsetko v libs, tak pridaj do robot loadru aj adresar libs. Ale urcite ti odporucam pouzivat composer, velmi si ulahcis pracu.
Stahoval, ale zas sem to přesunul. Když zapnu ten robot loaderu tak zas budu dostávat Ambiguous class Doctrine\Tests\DoctrineTestCase resolution.
Teď jsem ty třídy teda rozdělil do 2 složek:
vendor - knihovny stahovaný composerem (nette, kdyby/doctrine, doctrine, symfony/console)
libs - moje knihovny
A teď ať zapnu či vypnu robot loader pro jednu z těch složek, buď dostávam Class Not Found nebo Ambiguous class.
- Filip Procházka
- Moderator | 4668
Nedělej v tom bordel, nekompiluj to, použíj composer, udělej to pořádně a tak jak se má.
- David Klouček
- Člen | 57
Vždyť já to stahuju composerem, jen ale prostě nevim co dalšího udělat abych nedostával jednu z těch hlášek. V podstatě postupuju podle návodu https://github.com/…/en/index.md.

@Mysteria
Máš pravdu, takhle sem to původně měl. Ale to budu muset mazat pokaždý a
to se mi zdá právě divný.
Editoval David Klouček (5. 8. 2014 10:57)
- David Kudera
- Člen | 455
Mysteria napsal(a):
@David Klouček: Na stejný problém jsem narazil, když jsem si dával Kdyby/Doctrine dokupy zvlášť bez Composeru. Problém je v testech Doctrine2, takže normálně smaž složku tests/Doctrine/Tests. Pak to bez problémů funguje i s RobotLoaderem. :)
<irony>
Jak se říká, rada nad zlato, že? :-) jen je teda blbý, že takhle se ten
composer ty lidi nenaučí a budou řešit pořád další a další zbytečný
problémy
</irony>
Edit: jako bych nic neřek ;-)
Editoval David Kudera (5. 8. 2014 10:54)
- Mysteria
- Člen | 797
@David Klouček: Instalace přes Composer na čistým Nette 2.2.2 sandboxu funguje v pohodě (testováno včera).
@David Kudera: Tohle je diskutabilní – ano, v projektu, kde budu mít 20+ knihoven to asi má smysl, ale u svých cca 7 používaných knihoven si to radši postahuju a zkompletuju samostatně a je to taky bez problémů a ještě mám strukturu takovou, jakou já chci. :)
- MartinitCZ
- Člen | 580
@Mysteria Má to smysl i u jedné jedinné knihovny.
Ty doby, kdy jsem to musel stahovat ručně, rozbalovat, vkládat, sám
kontrolovat aktualizace jsou, díky bohu, pryč. Byla to nehorázná otrava, už
to nechci zažít!
Editoval MartinitCZ (5. 8. 2014 13:36)
- Filip Procházka
- Moderator | 4668
- vytvořit čistý composer.json (bez těch pičovin s config-dir: libs, a nebo nově vendor/others)
- nastavit závislosti
- composer update
- smazat načítání libs (a nebo vendor/others) robotloaderem
- načítat vendor/autoload.php
- profit