Přihlášení: Přechod z 2.4 na 3.0
- Quixe
- Člen | 10
Měl jsem Nette 2.4
kde jsem k přihlášení uživatele používal:
$netteUserLogin = Nette\Environment::getUser();
tam jsem využíval metody isLoggedIn(), login(), getId() atd.
Při přechodu na Nette 3.0 jsem v kódu změnil
Nette\Environment::getUser(); na new Nette\Security\User();
ale vypisuje to chybu
Fatal error: Uncaught Nette\InvalidStateException: UserStorage has not been set. in /www/doc/www.beeffco.com/www/wd/vendor/nette/security/src/Security/User.php:75
Co s tím? Jak to nejjednodušejí opravit? Vygooglil jsem v manuálu $user = $this->getUser(), ale nevím jak to použít. Ani dependency injection. Ale ten manuál Nette je jen pro chytrý…
Editoval Quixe (7. 7. 2021 12:40)
- Šaman
- Člen | 2661
A co na tomhle není pochopitelného? S tím, že se jedná o použití v presenteru.
$user = $this->getUser(); // tvůj $netteUserLogin
Mimochodem, to tě netrklo, že operátorem new
vytváříš
čistý, prázdný objekt User
bez jakýchkoliv závislostí? To je
přesně důvod, proč by operátor new
v Nette aplikacích měl
působit jako vykřičník. Pokud nevíš, že opravdu chceš new
(třeba Date
, nebo DateInterval
), tak je jeho
použití nejspíš chyba.
Editoval Šaman (7. 7. 2021 17:40)
- Kamil Valenta
- Člen | 815
Není dobré psát v Nette appku s přihlašováním uživatelů a
nerozumět ještě tak základní věci, jakou presentery jsou. Velmi
doporučuji nejprve nastudovat problematiku presenterů a pak se pustit do
ověřování uživatele…
A mimochodem, presentery přece byly i ve 2.4, moc nechápu, jak ta appka tedy
vypadá…
Editoval Kamil Valenta (7. 7. 2021 15:55)
- Šaman
- Člen | 2661
Quixe napsal(a):
Nicméně když napíšu jen
$user = $this->getUser()
tak mi to hodí chybu
Using $this when not in object context
To je hodně divné. To říká, že nejsi v žádném
objektu. Tedy ani v modelové třídě, nebo v komponentě.
Jenže v Nette bys naopak měl být vždy v objektu,
výjimkou je index.php
, který to celé jen spustí a do kterého
většinou nezasahuješ.
Opravdu bys asi měl začít Nette Sandboxem a pochopit aspoň základy. Jinak budeš narážet stále.
Editoval Šaman (7. 7. 2021 17:39)
- Quixe
- Člen | 10
Abych to zkrátil, tohle je hlavní stránka, kde je načtení Nette, autoloader a sessiony.
require 'vendor/autoload.php';
$configurator = new Nette\Configurator;
$configurator->setTempDirectory("tempNette");
$container = $configurator->createContainer();
$session = $container->getByType('Nette\Http\Session');
$sessionSectionLogin = $session->getSection('sessionSectionLogin');
$sessionSectionLogin->setExpiration(86400, 'temporyCompany');
$autoloader = new Nette\Loaders\RobotLoader;
$autoloader->addDirectory('class');
$autoloader->setTempDirectory('tempNette');
$autoloader->register();
//původně: $netteUserLogin = Nette\Environment::getUser();
/*nově: */
$netteUserLogin = new Nette\Security\User();
if($netteUserLogin->isLoggedIn() === FALSE) echo "nepřihlášen";
else echo "přihlášen";
Editoval Quixe (8. 7. 2021 9:39)
- David Matějka
- Moderator | 6445
Použij getByType na získání toho usera, podobně jako to děláš se session