Syntax registrovania sluzieb v config.ini
- westrem
- Člen | 398
Ahoj,
chcel by som sa spytat aka je obecne syntax pri registrovani sluzieb
v config.ini?
Co vsetko sa da ako sluzba zaregistrovat?
Tiez by ma zaujimalo kedy pouzit aj Namespaces a kedy nie, pretoze:
; Nefunguje, pritom je to riadok z dokumentacie
service.Nette-Security-IAuthenticator = PUser
; Funguje, riadok v distribucii
service.IAuthenticator = PUser
; Funguje
service.Nette-Loaders-RobotLoader.factory = Nette\NConfigurator::createRobotLoader
Trochu mam teda zmetok, kedy NS pouzit a kedy nie.
Dakujem
- Patrik Votoček
- Člen | 2221
Obecně se jako služba dá zaregistrovat jakýkoli Singleton… (přičemž
se nekontroluje jestli doopravdy o singleton jde). Pak tu taky platí že
služby se pojmenovávají jako Full Class Name (v configu \
nahradíš za -
) nicméně ani tohle se striktně
nekontroluje… :-(
service.Nette-Loaders-RobotLoader.factory = Nette\NConfigurator::createRobotLoader
WTF? to je doufám překlep!?
- Blizzy
- Člen | 149
Trochu je mi divné, že ten první řádek nefunguje, a ten druhý zase ano.
Jde o to, že název služby je prostě řetězec a může to být
v podstatě cokoliv. Nette myslím používá ve všech verzích název služby
celý včetně namespace, takže služba, která poskytuje autentizaci se
jmenuje všude Nette\Security\IAuthorizator
(i pro PHP bez
jmenných prostorů). Proto je mi divné, že píšeš, že ti funguje i jen
samotný název IAuthenticator
.
Zatímco název služby je řetězec a jsou v něm namespace i ve verzích pro PHP 5.2, tak v hodnotě (vlastní služba, třída, továrnička, singleton…) se namespace použijí pouze pokud programuješ v PHP 5.3 a používáš je.
Takže pokud to shrnu, správně by to mělo být takto:
; pro PHP bez namespace
service.Nette-Security-IAuthenticator = Users
; pro PHP s namespace
service.Nette-Security-IAuthenticator = \MujNamespace\Blabla\Users
Proč ti první řádek nefunguje je mi záhadou, možná je třída PUser nedostupná nebo někde schovaná. Taky je záhada, proč funguje druhý řádek. V distribuci v CD-collection pro PHP 5.2 s prefixy je taky tohle:
; services
service.Nette-Security-IAuthenticator = Users
service.Nette-Loaders-RobotLoader.option.directory[] = %appDir%
service.Nette-Loaders-RobotLoader.option.directory[] = %libsDir%
service.Nette-Loaders-RobotLoader.run = TRUE
Editoval Blizzy (12. 8. 2010 14:12)
- westrem
- Člen | 398
No tak mam tuto verziu:
Nette Framework 0.9.4 (revision ae0c8bd released on 2010–04–14)
V distribucii s touto verziou, je v CD-collections v config.ini toto:
; services
service.IAuthenticator = Users
Dalej ked sa snazim pouzit
service.Nette-Security-IAuthenticator = PUser
Tak dostanem tuto hlasku.
Z nejakeho dovodu tam User.php vola priamo IAuthenticator
. Ked sa
pozriem to kodu k NUser
tak naozaj na riadku 174: sa
nachadza toto:
$this->authenticationHandler = NEnvironment::getService('IAuthenticator');
Teda bez namespace. Zaujimave vsak je, ze manual, ktory mam na locale k tejto verzii obsahuje na rovnakom riadku toto:
$this->authenticationHandler = NEnvironment::getService('Nette\\Security\\IAuthenticator');
Nemohol nastat niekde bug pri generovani N verzie? Ale ako by potom clovek co
pisal CD-collection vedel, ze to ma napisat iba ako
service.IAuthenticator
.
Niekde je chyba, ale to uz je mimo mna.
vrtak-cz napsal:
WTF? to je doufám překlep!?
Nie nie je tam preklep.
service.Nette-Loaders-RobotLoader.factory = Nette\NConfigurator::createRobotLoader
toto je copy paste z konfiguraku, ktory mi plne funguje.
Ja si to fakt nevymyslam :), mne pride logicke to co ste tu napisali, metie ma to uz dlhsiu dobu tak so sa radsej spytal.
- Blizzy
- Člen | 149
westrem napsal(a):
Nemohol nastat niekde bug pri generovani N verzie? Ale ako by potom clovek co pisal CD-collection vedel, ze to ma napisat iba ako
service.IAuthenticator
.Niekde je chyba, ale to uz je mimo mna.
Taky mě to napadlo, je to možné, repozitář na gitu se od verze 0.9.4 změnil na PHP 5.3 a změnilo se tedy i generování prefixed verzí. Doporučuju stáhnout aktuální 0.9.5 stable s prefixy, tam ten problém není.
https://forum.nette.org/…kterych-trid?…:
Generátor prefixované verze byl vždy tak trošku haluzoidní, ale teď už by měl fungovat na 100 %.
Editoval Blizzy (13. 8. 2010 21:34)
- Blizzy
- Člen | 149
westrem napsal(a):
vrtak-cz napsal:
WTF? to je doufám překlep!?Nie nie je tam preklep.
service.Nette-Loaders-RobotLoader.factory = Nette\NConfigurator::createRobotLoader
toto je copy paste z konfiguraku, ktory mi plne funguje.
Tato hodnota je tam myslím zbytečně, Configurator má nativně nastavenou službu Nette\Loaders\RobotLoader na Configurator::createRobotLoader. https://api.nette.org/…tor.php.html#27
- Patrik Votoček
- Člen | 2221
Doopravdy je to OK? mě to připadá hodně podivné… kombinace Namespace a Prefixed nette… :-/
Btw být to tam musí za předpokladu že chceš použít vlastní konfiguraci složek. viz bug: https://github.com/…ues/issue/63