Rozšíření DI Containeru: Aspektově orientované programování – Kdyby/Aop
- Filip Procházka
- Moderator | 4668
Znáte Aspektově orientované programování?
Pracuji na rozšíření, které ho přidává
do Nettího DI Containeru
Prototyp už je funkční na Gitubu, samozřejmě včetně dokumentace a je možné ho klasicky nainstalovat pomocí composeru :)
Instalace
Tato knihovna je pouze pro vývojovou verzi Nette a je třeba závislosti v composeru speficikovat takto, kvůli minimální stabilitě balíčku:
"require": {
"nette/nette": "@dev",
"kdyby/annotations": "@dev",
"kdyby/aop": "@dev"
}
Otázky směřujte sem
Další otázky prosím zakládejte jako samostatná témata na novém fóru help.kdyby.org. Díky!
- redhead
- Člen | 1313
Znám. Měl jsem rozpracovanou integraci Go!, ale byly tam nějaké problémy s autoloaderem (bilo se s RobotLoaderem) a nakonec jsem to dal k ledu, že se k tomu někdy vrátím.
K tvému rozšíření. Nevím jestli je chyba na mé straně, ale nejde mi to za boha rozjet.
První věc je, že když to nechám jet na @dev verzi nette, tak to spadne na
Declaration of Kdyby\Annotations\DI\AnnotationsExtension::afterCompile() should be compatible with Nette\DI\CompilerExtension::afterCompile(Nette\PhpGenerator\ClassType $class)
Ok, žádný problém, fixnul jsem, zaregistroval extensiony a vytvořil
nějaký aspect s pointcutem methodAnnotatedWith
okolo metody a
pak to vyhodí:
[Semantical Error] The annotation "@Kdyby\Aop\Around" in method Aspect::method() does not exist, or could not be auto-loaded.
Z toho, co jsem dokázal oddebugovat, to vypadá, že se nenastaví loader
pro anotace na fci class_exists
. Tedy k té registraci se to ani
nedostane, neboť weaving se dělá při beforeCompile a nastavení loaderu je
při afterCompile (teda pokud jsem to správně pochopil). Tak jsem to
registrování dal pro jistotu natvrdo do bootstrapu.
No a nakonec, když už to vypadalo, že to pojede, tak to padne na:
[] operator not supported for strings in ...\libs\nette\nette\Nette\common\ObjectMixin.php:90
když se to snaží vložit dokumentační anotaci @internal.
- Filip Procházka
- Moderator | 4668
@redhead Ahoj, moc díky za reporty, mělo by to být opravené.
A ohledně
Kdyby\Annotations\DI\AnnotationsExtension::afterCompile()
, kvůli
minimální stabilitě balíčku není možné vynutit
instalaci @dev
závislosti z druhé úrovně.
Zkus to takto mělo by to fungovat
"require": {
"nette/nette": "@dev",
"kdyby/annotations": "@dev",
"kdyby/aop": "@dev"
}
Doplnil jsem to raději i do prvního postu :)
- Filip Procházka
- Moderator | 4668
@Felix: pár jich existuje, ale jediné (pro mě) schůdné je z nich pouze již zmiňované „Go!“, ale i to se mi úplně nelíbí, byť má některé features, které budu muset se svou architekturou oželet.
- petr.pavel
- Člen | 535
Nechtěl byste si někdo udělat přednášku o AOP a Nette na nějaké Posobotě? Jel bych kvůli tomu i na kraj světa.
Mimochodem, proč je poslední Posobota na https://www.posobota.cz/ z roku 2012?
- Filip Procházka
- Moderator | 4668
@petr.pavel: budu to teď intenzivně používat a když se budu cítit že o to něco málo vím, tak bych si mohl na nějakou pražskou něco připravit :)