Doctrine plugin pro nette framework
- Honza Marek
- Člen | 1664
Napadlo mi, že by bylo fajn udělat nějaké rozšíření frameworku, které by bezpracně integrovalo podporu pro Doctrine.
V bootstrapu by se napsalo něco jako
NettePlugin\DoctrinePlugin::register();
A ono by to
- do contextu zaregistrovalo správně nakonfigurované služby entity managerů
- vytvořilo služby doctrine.arraycache a doctrine.nettecache. Tyto služby by se využily při vytváření entity managerů
- do debug baru přidalo Vrtákův Doctrine panel
Je ještě něco potřeba?
Do config.neon by se přidala zhruba takto vypadající konfigurace:
doctrine:
connections: # seznam spojení
default: # jedno má jméno default
driver = pdo_mysql
host = 127.0.0.1
dbname = db
user = root
password = xxx
managers: # seznam entity managerů
default: # služba, která bude v contextu pod názvem doctrine.entitymanager.default
connection: default # použije spojení default
cache: doctrine.arraycache # jako cache bude použita služba doctrine.arraycache, kterou doctrine plugin také přidá
entityDirs: # entity budou hledány v následujících adresářích
- %appDir%/Model
Nebo udělat tu konfiguraci jednodušší, ale méně univerzální? Většina projektů potřebuje jeden entity manager.
Poznámky:
- Potom by bylo fajn to tlačit oficiálně jako alternativu oproti Nette\Database.
- V metodě DoctrinePlugin::register by se odehrávala nějaká černá magie a hrátky s environmentem. Bylo by fajn to umět zprůhlednit pomocí předání contextu do té metody, jenže z contextu nejde dostat konfigurace nebo debug panel :(
Nápady, připomínky?
- Mikulas Dite
- Člen | 756
Já bych to uvítal, na větší ORM (Doctrine) jsem zatím jenom pošilhával právě kvůli složitějšímu spojení s Nette. Takže by se mi to líbilo průhlednější (což nemusí být vždy jednodušší). Ale asi to narvhněte vy, co používáte Doctrine.
Ke contextu: dá se injectnout i Debugger, když se sežene jeho instance, nebo ne? Pass by reference
Editoval Mikulas Dite (22. 4. 2011 20:15)
- Honza Marek
- Člen | 1664
Instanci třídy Nette\Diagnostics\Debugger
umí sehnat jedině
Chuck Norris. Šel by sice předat rovnou ten panel, ale to je
takové divné chtít to po někom a tvrdit, že mu usnadňuju práci :) Možná
bych šel kompromisní cestou:
$doctinePlugin = new NettePlugin\DoctrinePlugin;
$doctrinePlugin->register(Environment::getContext(), Environment::getConfig());
A ten debug bar zaregistroval tajně neprůhledně, byť za to půjdu do DI pekla.
- Patrik Votoček
- Člen | 2221
něco takového mám už poměrně dlouho ukuchtěno a pořád to vylepšuju (hodně velké omezení je stávající DI v Nette). Nicméně začal jsem včera pracovat no nejnovějším řešení které by mělo být venku v průběhu tohoto víkendu (max do nadcházející PoSoboty)
- David Grudl
- Nette Core | 8229
Honza Marek napsal(a):
V metodě DoctrinePlugin::register by se odehrávala nějaká černá magie a hrátky s environmentem. Bylo by fajn to umět zprůhlednit pomocí předání contextu do té metody, jenže z contextu nejde dostat konfigurace nebo debug panel :(
Tomu moc nerozumím. Černou magií myslíš
Environment::getContext()->addService()
?
Mikulas Dite napsal(a):
Já bych to uvítal, na větší ORM (Doctrine) jsem zatím jenom pošilhával právě kvůli složitějšímu spojení s Nette.
V čem konkrétně je složitost spojení s Nette? Pokud vím, běžně se Nette + Doctrine používá. Můžeš být konkrétnější?
- Patrik Votoček
- Člen | 2221
V aktuálním Nette to řeším tímhle statickým kontejnerem: https://github.com/…ontainer.php (ještě je co vylepšovat – čekám na další pokrok Nette\DI)