Kam umístit MyAuthenticator

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

když napíšu MyAuthenticator podle návodu .. kde musí být soubor, popřípadě kde co nastavit v konfugucai aby ho nette našlo ?

myslím že je vše okey .. ale pořád nejede

ERR:
Class MyAuthenticator used in service ‚nette.authenticator‘ has not been found or is not instantiable.

David Matějka
Moderator | 6445
+
0
-

nekam do slozky app – tam vidi robot loader (pri defaultnim nastaveni). a zkontroluj si, jestli mas spravne namespaces

malkol
Člen | 133
+
0
-

a namespaces ověřím kde ? :-)

malkol
Člen | 133
+
0
-

zeptám se lépe .. jaký namespace musi byt v tom authentifikatoru .. nikde nemuzu najit nic o tom jak se to má udelat

Šaman
Člen | 2666
+
0
-

Jakékoliv. Ale stejné NS musíš mít pak v configu při vytváření služby a také v presenteru, když si tuto službu vyžádáš.

Zax
Člen | 370
+
0
-

Je to úplně jedno. Můj authenticator má například namespace WebModule\Model\Security a jmenuje se AuthenticatorService. V configu ho nastavuji takto jednoduše:

common:
    services:
        - WebModule\Model\Security\AuthenticatorService
        user:
            setup:
                - setAuthenticator( @WebModule\Model\Security\AuthenticatorService );

Možná dokonce stačí jen první tři řádky a on si to framework automaticky nadrátuje, ale to jsem radši nikdy nezkoušel :D

Šaman
Člen | 2666
+
0
-

Ty řádky 4–6 nějak nechápu. Tohle ti vážně prochází? Takovéhle nastavení usera jsem nikde v praxi neviděl.
User si autenticator naje v kontejneru sám podle toho, že splňuje IAuthenticator.

A sekce jsou už v aktuálním Sandboxu vypnuté, takže stačí minimálně

services
	- WebModule\Model\Security\AuthenticatorService

Takhle ho dostaneš do tříd modelu

<?php
class UserRepository
{
	protected $authenticator;

	public function __construct(WebModule\Model\Security\AuthenticatorService $auth)
	{
		$this->authenticator = $auth;
	}
}
?>

A takhle do presenteru

<?php
class UserPresenter extends BasePresenter
{
	/**
	 * @var WebModule\Model\Security\AuthenticatorService
	 * @inject
	 */
	public $authenticator;
}
?>

NS i název třídy si můžeš zvolit jaký chceš, jen je nutné, aby implementoval rozhraní IAuthenticator a aby na všech místech, kde jsem vypisoval název třídy i s NS byl uveden správně. I v tom komentáři (je to anotace, podle které se dohledává v kontejneru).


Edit:
Původně private property v modelu jsem změnil na protected. Nesouvidí to sice s DI, ale jestli to někdo opíše, ať to opíše tak, jak bych to napsal sám.

A zdůrazňuji, že v presenteru je ona property public, jinak by do ni nebylo možné nic předat.

Editoval Šaman (8. 4. 2014 20:04)

Zax
Člen | 370
+
0
-

Šaman napsal(a):

Ty řádky 4–6 nějak nechápu. Tohle ti vážně prochází? Takovéhle nastavení usera jsem nikde v praxi neviděl.
User si autenticator naje v kontejneru sám podle toho, že splňuje IAuthenticator.

Ty řádky jsem tuším kdysi obšlehnul z nějakého (asi staršího) návodu. V configu to používám snad od doby, co jsem Nette vůbec objevil… Proč by to nemělo projít? A jinak ano, máš pravdu, funguje to i bez toho. Ono je celkem fuška sledovat co nového je v Nette a co všechno si člověk může nově dovolit, když spousta návodů je psaná pro starší verze -_-

malkol
Člen | 133
+
0
-

už jede ;) děkuji