jak a kde zapnout session

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

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)

Mysteria
Člen | 797
+
+2
-

Záleží jak máš kód, ale jednoduše můžeš ve zpracování přihlašovacího formuláře použít něco jako $this->getSession('myApp')->username = $form->values->username; a předvyplnění pak bude normálně zase
$form->setDefaults(['username' => $this->getSession('myApp')->username]);

mordare
Začátečník | 117
+
+2
-

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)

kolaloka
Člen | 71
+
0
-

Díky moc všem. Teď je mi to jasnější. A ten nápad s identitou je zajímavý. Ale jak to funguje? Předává se identita mimo session? Kde?

duke
Člen | 650
+
+3
-

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().

kolaloka
Člen | 71
+
0
-

Hmm, tak tohle je informace! Díky.

kolaloka
Člen | 71
+
0
-

Chvíli mi trvalo, než jsem přišel na to, co myslí mordare tím „getIdentity()->data;“
ale nakonec mi to došlo, takže username se pak vypíše takhle:

<?php
.
.
'username' => $this->getUser()->getIdentity()->username,
.
.
?>

ještě jednou díky všem.