Našeptávání metod a členských proměných služby z DI containeru
- loov
- Člen | 49
Ahoj,
v config.neonu jsem si definoval takto službu statisticsService:
<?php
dibiConnection:
class: DibiConnection
arguments: ['%dibiConnect%']
statisticsService: StatisticsService(@dibiConnection)
?>
v presenteru se k té službě dostanu přes context, ale jaksi už nevidím dovnitř té služby, respektive IDE Netbeans my nenašeptávají co ta služba umí. Chtěl bych se proto poradit, jakým způsobem toho docílit?
- Filip Procházka
- Moderator | 4668
Netbeans ti budou našeptávat v momentě, kdy necháš takový container sestavit. Jednoduše dej F5 v prohlížeči.
- loov
- Člen | 49
Problém vyřešen:
- ve startupu presenteru si uložím službu do private proměnné přes vlastní setter
- pomocí phpDoc (@var názevTřídy) řeknu Netbeans co proměnná obsahuje a voilà Netbeans mi našeptávají vše co danná služba obsahuje
Není to bůh ví jaké řešení, ale třeba tu ještě někdo řeší podobný problém :-)
- ViPEr*CZ*
- Člen | 817
loov napsal(a):
Nepřepisuji, ale zjistil jsem, že jsem neznalý Nette. Přistupoval jsem k proměnné $context ze svého presenteru takto $this->context… No ale když k ní přistupuji tímto způsobem $this->getContext()->mojeService->… tak se vše v klidu napovídá :-)
Jj to je kvůli „černý magii“ setterů a getterů (takhle se to chová ne jen u DI) a Netbeans todle nepoberou.
Editoval ViPEr*CZ* (27. 2. 2012 10:12)
- ViPEr*CZ*
- Člen | 817
Aha, tak jsem to zkusil a vážně to pobere. Tak to se omlouvám. Tak to bylo něco jinýho, až to zas najdu, tak to, když tak postnu.
PS: tak jsem teď při práci… a třeba z modelu mi to nenašeptalo nic teď… takže to asi úplně nefunguje 100%.
Editoval ViPEr*CZ* (1. 3. 2012 17:22)
- frosty22
- Člen | 373
Mě Netbeans (7.1.2.) dělá totéž, při získání metodou getContext našeptává i z generovaného SystemContainer, ale při $this->context pouze z rozhraní IContainer. Osobně jsem vyřešil anotací v BasePresenteru:
<?php
/**
*
* @property-read \SystemContainer $context
*/
abstract class BasePresenter extends Presenter { ... }
?>
Editoval frosty22 (2. 5. 2012 16:07)
- vvoody
- Člen | 910
loov napsal(a):
Problém vyřešen:
- ve startupu presenteru si uložím službu do private proměnné přes vlastní setter
- pomocí phpDoc (@var názevTřídy) řeknu Netbeans co proměnná obsahuje a voilà Netbeans mi našeptávají vše co danná služba obsahuje
Není to bůh ví jaké řešení, ale třeba tu ještě někdo řeší podobný problém :-)
Co je na tomto rieseni podla teba zle? Instanciacia sluzby este pred tim, nez vies, ze ju budes potrebovat?
- mildabre
- Člen | 62
loov napsal(a):
Nepřepisuji, ale zjistil jsem, že jsem neznalý Nette. Přistupoval jsem k proměnné $context ze svého presenteru takto $this->context… No ale když k ní přistupuji tímto způsobem $this->getContext()->mojeService->… tak se vše v klidu napovídá :-)
To je škoda, DGX si dal práci, aby se mohlo psát i v PHP
$this->context->sluzba // jako v plně objektových jazycích
místo:
$this->getContext()->sluzba // jako ve starém PHP bez Nette
Ten druhý způsob ale v Netbeans funguje. Když použiji tu druhou variantu, našeptává mě to ihned, ale stovky různých metod a vlastností z celého containeru, takže si stejně musím pamatovat jak daná služba kterou hledám alespoň začíná.
- Vojtěch Dobeš
- Gold Partner | 1316
Nenašeptávejte, ale pište inject
metody
:).
Editoval vojtech.dobes (10. 12. 2012 17:16)