Doctrine plugin pro nette framework

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

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

  1. do contextu zaregistrovalo správně nakonfigurované služby entity managerů
  2. vytvořilo služby doctrine.arraycache a doctrine.nettecache. Tyto služby by se využily při vytváření entity managerů
  3. 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
+
0
-

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
+
0
-

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
+
0
-

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 | 7790
+
0
-

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
+
0
-

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)