Kam správne zakomponovať event onLoggedIn[]

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

Zdravím
Chcel by som spustiť po prihlásení užívateľa event onLoggedIn[]
mal by spustiť funkciu umiestnenú v repozitári

Kam to umiestniť aby sa to vykonalo pri prihlásení z akéhokoľvek formulára
je tam závislosť na User a Session

Ide o to že mám spravený v Eshope Wishlist
ak je užívateľ odhlásený tak položky ukladá do Session
a keď sa prihlási tak nech ich presunie do DB

Vytvoril som aj samostatnú Classu

class ShopWishlistRepositoryLoader
{
	public function __construct(
		ShopWishlistRepository $shopWishlistRepository,
		\Nette\Security\User $user,
		\Nette\Http\Session $session
	) {
		$this->shopWishlistRepository = $shopWishlistRepository;
		$this->session = $session;

		$user->onLoggedIn[] = array($this, 'addItemsAfterLogging');
	}

	public function addItemsAfterLogging()
	{
		$session = $this->session->getSection('shopWishlist');

		if ($session) {
			$this->shopWishlistRepository->addItemsAfterLogging($session);
		}
	}
}
jiri.pudil
Nette Blogger | 1032
+
+6
-

Když tu třídu zaregistruješ jako službu s tagem run, vytvoří se (zavolá se konstruktor, a tedy se navěsí ta funkce na událost) automaticky při inicializaci kontejneru:

services:
	- {class: ShopWishlistRepositoryLoader, tags: [run]}

Kdybys chtěl robustnější řešení, podívej se na Kdyby/Events.

Felix
Nette Core | 1245
+
0
-

Nebo muzes zkusit jednodussi Minetro/Events.

Pripadne muzes navazat addItemsAfterLogging rovnou v configu.

services:
	shopRepositoryLoader: ShopWishlistRepositoryLoader
	user:
		setup:
			- "?->onLoggedIn[] = [@shopRepositoryLoader, 'addItemsAfterLogging']"(@self)

Editoval Felix (26. 7. 2015 17:46)

Myiyk
Člen | 321
+
+6
-

@Felix Já jen žasnu nad tou syntaxí pro config.

sucho
Člen | 57
+
0
-

Dik prvý spôsob funguje druhý som ani neskúšal ;)

Filip Procházka
Moderator | 4668
+
0
-

Myslím si že to co posílal @Felix fungovat nebude, správně takto

services:
    shopRepositoryLoader: ShopWishlistRepositoryLoader
    user:
        setup:
            - "?->onLoggedIn[] = [?, 'addItemsAfterLogging']"(@self, @shopRepositoryLoader)
Felix
Nette Core | 1245
+
0
-

Filip Procházka napsal(a):

Myslím si že to co posílal @Felix fungovat nebude, správně takto

services:
    shopRepositoryLoader: ShopWishlistRepositoryLoader
    user:
        setup:
            - "?->onLoggedIn[] = [?, 'addItemsAfterLogging']"(@self, @shopRepositoryLoader)

Zkousel jsem to v poslednim Nette. Myslim, ze je to ekvivalent k tomu tvemu.

sorm
Člen | 8
+
0
-

Felix napsal(a):

Filip Procházka napsal(a):

Myslím si že to co posílal @Felix fungovat nebude, správně takto

services:
    shopRepositoryLoader: ShopWishlistRepositoryLoader
    user:
        setup:
            - "?->onLoggedIn[] = [?, 'addItemsAfterLogging']"(@self, @shopRepositoryLoader)

Zkousel jsem to v poslednim Nette. Myslim, ze je to ekvivalent k tomu tvemu.

Pro případ, že by to někdo i po roce chtěl zkoušet – tak to od @Felix nefunguje, musí se použít to od @FilipProcházka

Prověřeno hard way.