jak a kde zapnout session
- kolaloka
- Člen | 71
Nejsem schopen zapnout session a načítat z ní. V dokumentaci čtu, že když dám do neonu:
<?php
session:
expiration: 2 days
autoStart: smart
?>
V dokumentaci k session čtu, že do presenteru zapíšu:
<?php
$session = $this->getSession(); // returns the whole Session
$mySection = $this->getSession('mySection'); // returns SessionSection with given name
?>
Ale jak to tam zapíšu? Když ty řádky dám na úvod:
<?php
use Nette;
use Nette\Application\UI\Form;
$session = $this->getSession();
$mySection = $this->getSession('mySection');
?>
tak se stránka zasekne a nevyhodí ani laděnku. Když to v prezenteru umístím dovnitř funkce s formulářem, tak vše běží, ale nic to nevyplivne:
<?php
.
.
protected function createComponentZakazkaForm()
{
$form = new Form;
.
.
$session = $this->getSession(),
$form->setDefaults(array(
'tdate' => $this->createtdate(),
'username' => $mySection,
.
.
?>
Pokud je to takhle dobře, pak by to znamenalo, že musím nějak do session nahrát username z databáze „ručně“. Ale kde to udělám a jak přesně? V signInPresenteru? Může mi někdo ukázat funkční příklad?
Omlouvám se za svou omezenost a díky všem předem za pomoc.
Editoval kolaloka (3. 4. 2017 12:02)
- mordare
- Začátečník | 117
Odpověděl sis vlastně sám. Data o uživateli si musíš uložit dřív. Třeba v Sign presenteru jak zmiňuješ.
public function signFormSubmitted($form, $values){
$session = $this->getSession();
$sessionSection = $session->getSection('mySection');
$sessionSection->user = $values;
}
BTW. Máš nějaký důvod držet si uživatele v Session? Pokud si při přihlášení správně vytvoříš Identitu můžeš data získat pomocí:
$userData = $this->getUser()->getIdentity()->data;
Editoval mordare (3. 4. 2017 10:43)
- duke
- Člen | 650
Identita se předává v objektu typu IUserStorage v rámci služby Http\Security\User. Výchozí implementace je třída UserStorage, která k tomu používá session. Služba Http\Security\User je dostupná v každém presenteru metodou getUser().