Closed Keeehi closed 9 years ago
Je to kvuli nekompatibilite nette/databse, ktera se nedavno zmenila. Staci upravit config. Srr, jeste jsem to nezvladl udelat, zvlaste proto,z e orm bude mit novej backend nextras/dbal.
ok, a byl by nějaký rychlonávod, jak orm rozchodit abych si ho mohl vyzkoušet? Snažím se to zprovoznit z db-benchmark z kterého jsem si to vykopíroval.
{
"require": {
"php": "~5.4",
"nette/nette": "@dev",
"nextras/orm": "@dev"
},
"minimum-stability": "dev"
}
nette:
database:
dsn: 'mysql:host=127.0.0.1;dbname=orm'
options:
lazy: yes
extensions:
orm: Nextras\Orm\Bridge\NetteDI\OrmExtension
orm:
model: OrmDemo\Orm
Při této konfiguraci dostávám
Nette\DI\ServiceCreationException
Service of type OrmDemo\Orm used in @var annotation at Property [ <default> public $orm ] not found. Did you register it in configuration file?
Normálně bych čekal, že OrmDemo\Orm mi jako službu zaregistruje ta extension. Ať se to ale snažím upravovat jak chci, pořád se mi to nedaří.
Tak jsem to vyzkousel a myslim, ze jsou to bugy v nette 2.3: https://github.com/nette/di/issues/53
Muzes si zkusit locknout nette databse na 2.3 dev commit, ktery funguje s nette 2.2, viz. readme u nextras/orm.
Nedaří se mi to ať se snažím sebevíc. Pokud chci nainstalovat nette/nette ve stabilní verzi, tak to nejde protože vyžaduje taky stabilní nette/database. Pokud nette/nette nainstaluji v dev verzi, nette/database taky v aktuální dev verzi, pak končím na předchozí exception. A při použití starších commitů dev větve nette/database dostávám zase tuto výjimku
ReflectionException
Class Nette\Bridges\DatabaseDI\DatabaseExtension does not have a constructor, so you cannot pass any constructor arguments
Takže co přesně si mám do composer.json napsat aby mi to určitě fungovalo? A mám použít config z tohoto repa nebo je potřeba ho nějak upravit?
Konečně se mi to povedlo rozchodit.
composer.json
{
"require": {
"php": "~5.4",
"nette/nette": "@dev",
"nextras/orm": "@dev"
},
"minimum-stability": "dev"
}
Konfigurace není třeba měnit
Pro předání závislostí je nutné místo anotací použít inject metody http://pla.nette.org/cs/inject-autowire
jo, protoze david uz neco opravil, ja jsem ted opravil zbytek, takze melo by jen uz i injectovani pomoci anotace. prosim dej vedet :-) diky.
Injektování pomocí anotace už teď funguje. Celé fungovalo, musel jsem upravit composer.json aby instaloval verze, ve kterých to funguje. Taky ještě byla chybka v konfiguraci extension. No a ještě to divné pojmenování config local. V jiných repozitářích by to asi mělo význam ale tady ho nevidím. Tak jsem to upravil tak, aby toho bylo nutné upravovat co nejméně potom, co si to člověk poprvé stáhne >> #2
Stáhl jsem si nejnovější repozitář a mám stejný problém jako v úvodním postu, co je ještě potřeba udělat?
pusnul jsem aktualni opravenou verzi, ktera uz nepouziva nette database, ale nextras/dbal. kdyby byl problem se zprovoznenim (coz muze byt kvulit timezonam), tak
- mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
Dokud nebude dokumentace k orm, šlo by toto upravit tak, aby se to dalo po stáhnutí hned použít?
config.local.example.neon -> config.local.neon
No a pak už dostávám hlášku