jak z configu číst hodnoty?

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

Zdravím,
s Nette se zatím seznamuji a zkouším si ACL, nalezl jsem tutoriál, kde se nastavuje salt ještě v config.ini

chtěl jsem si to zprovoznit v config.neon a tak jsem vytvořil toto:

	security:
		salt: tadybudesalt

napadlo mne to dolovat takto, ale tak to dostanu pouze v bootstrap

$container->container->params['security']['salt']

potřeboval ten salt zjistit v mém authenticatoru

Nejsem si jistý, že na to jdu dobře:-)

uestla
Backer | 799
+
0
-

Osobně bych to řešil dvěma způsoby, a sice konstruktoru Authenticatoru bych předal buď:

  • čistě pouze sůl
  • nebo celý kontext

Konkrétně:

# čistě sůl
common:
	services:
		authenticator:
			class: MyAuthenticator
			arguments: [%security.salt%]

# nebo celý kontext (resp. kontajnér)
common:
	services:
		authenticator:
			class: MyAuthenticator
			arguments: [@container]

Pak už by se v závislosti na volbě řešení samozřejmě k soli v konstruktoru přistupovalo příslušným způsobem.

PS: psáno z paty

hAssassin
Člen | 293
+
0
-

v prezenteru to ziskas takto:

$salt = $this->context->params['security']['salt'];

v authenticatoru to bude trochu komplikovanejsi, jelikoz ty potrebujes ten salt (nebo jakoukoliv jinou promennou) nejak dostat do tridy. A to nejlip tak, ze ji predas v konstruktoru. Cili (psano z hlavy, snad je to ok):

config.neon:

...
	services:
		...
		authenticator:
			class: \MyAuthenticator
			arguments: ["%security.salt%"]
...
	security:
        	salt: tadybudesalt

a pak MyAuthenticator:

final class MyAuthenticator implements \Nette\Security\IAuthenticator
{
	private $salt = NULL;

	public function __construct($s)
	{
		$this->salt = $s;
	}

	public function authenticate(array $credentials)
	{
		// tady uz salt muzes pouzivat:
		echo $this->salt;
	}
}

Finta je v tom ze ty vlastne nic nemusis nikde volat nebo instanciovat, o to se postara samo Nette vcetne predani soli do konstruktoru.

Editoval hAssassin (29. 10. 2011 23:19)

Paradiso
Člen | 101
+
0
-

děkuji za reakce, až budu moci, tak vyzkouším :-)

Paradiso
Člen | 101
+
0
-

super funguje to:-)
jen v prezenteru je to:

$salt = $this->context->params['security']['salt'];

:-)

všem ještě jednou děkuji

Editoval Paradiso (29. 10. 2011 23:09)

hAssassin
Člen | 293
+
0
-

mea culpa… fixed

rumcais1
Člen | 81
+
0
-

Používám nette 2.0.8 a potřebuji do authentikatoru dostat adresu LDAP_serveru. Chtěl jsem to udělat stejně jako je tady příklad se salt, ale nějak se mi to nedaří. Můžete mi poradit. Děkuji

vvoody
Člen | 910
+
0
-

Tvoj kód? (config, Authenticator) Ako sa prejavuje to, že sa ti to nedarí?

rumcais1
Člen | 81
+
0
-

config.neon uz tady to pise Undefined index: security

#
# SECURITY WARNING: it is CRITICAL that this file & directory are NOT accessible directly via a web browser!
#
# If you don't protect this directory from direct web access, anybody will be able to see your passwords.
# https://nette.org/en/security-warning
#
common:
	dibi:
		driver: mssql2005
		host: sqlweb\sqltst
		options:
			UID = ...
			PWD = ...
			Database = ...
			CharacterSet = UTF-8
			#CharacterSet = char
		lazy: TRUE
		profiler: TRUE
	parameters:

	php:
		date.timezone: Europe/Prague
		# zlib.output_compression: yes

	nette:
		application:
			errorPresenter: Error

		database:
			dsn: 'mysql:host=localhost;dbname=test'
			user:
			password:

		session:
			expiration: 14 days

		security:
			ldap_server: 192.168.4.20

	services:
		nette.userStorage:
			setup:
				- setNamespace('zadost')
		authenticator:
			class: Authenticator
			arguments: ["%@security.ldap_server%"]
		routerFactory: RouterFactory
		router: @routerFactory::createRouter
		zadosti:
			class: Model\zadostiRepository(@dibi.connection)
		ciselniky:
			class: Model\ciselnikyRepository(@dibi.connection)
		ucastnici:
			class: Model\ucastniciRepository(@dibi.connection)
		zadostiUcastnici:
			class: Model\zadostiUcastniciRepository(@dibi.connection)
		ZadostiDalsiUzivatel:
			class: Model\ZadostiDalsiUzivatelRepository(@dibi.connection)
		DalsiUzivatele:
			class: Model\DalsiUzivateleRepository(@dibi.connection)

	factories:


production < common:

development < common:
vvoody
Člen | 910
+
0
-

Ta adresa nepatrí do nastavenia nette extension, (nette extension žiadne také nastavenie nespracúva) takže:

nette:
	security:
		ldap_server: 192.168.4.20

presun do sekcie parameters

parameters:
	ldap_server: 192.168.4.20

Ďalší problém máš v nastavení argumentov pre authenticator. Zavináčom sa odkazuje na službu, percentami sa odkazuje na parameter. Obe naraz určite nepoužívaj.

services:
	authenticator:
		class: Authenticator
		arguments: [%ldap_server%]
rumcais1
Člen | 81
+
0
-

díky moc. už to funguje.