Syntax registrovania sluzieb v config.ini

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

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

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

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

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

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)

westrem
Člen | 398
+
0
-

Prave, ze viem o tom, ze to bolo „haluzoidne“ :) preto ma to napadlo ako miesto vzniku problemu :)

Blizzy
Člen | 149
+
0
-

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

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