Autor Zpráva
CarlosK
Profil *
Dobrý den, neporadil by mi zde někdo jak pracovat se sessions v Nette 2.03. Marně jsem se pokoušel nalézt návod na internetu, ale marně. Všem děkuji za odpovědi
Johnik
Profil
http://doc.nette.org/cs/sessions
CarlosK
Profil *
Toto jsem četl, ale nechápu, jestli si mám například vytvořit model, který bude obsluhovat sessions a který poté zaregistruji do services (případně nevím jak by takový model měl vypadat). Omlouvám se za takovýto dotaz, ale s Nette teprve začínám.
Johnik
Profil
To už závisí na návrhu aplikace. Můžeš se sessions pracovat v presenterech nebo modelu, jak chceš.

Důležité je si předat session service z di kontejneru tam, kde se sessions budeš pracovat.
CarlosK
Profil *
Lze to udělat napříkad takto?

Vytvořím model TestSession.php

<?php

class TestSession
{
    private $session;
    
    public function __construct(Nette\Http\Session $session)
    {
        $this->session = $session;
    }
    
    public function get($name)
    {
        return $this->session->getIterator()->getArrayCopy();
    }
    
    public function set($name, $data)
    {
        $this->session->$name = $data;
    }
}

Zaregistruji ho do config.neon:

  
services:
    testSession: TestSession

v prezenteru Test.php zavolám:

$session = $container->getService('testSession');
$section = $session->getSection('...'); //zde vůbec nevím, co má metoda getSection obsahovat

A zde jsem zkončil. Nevím jak do sessions zapisovat, nebo jak je vypsat.
Johnik
Profil
Práci se session máš popsanou v odkazované dokumentaci, říkal bych to samé.

Ten tvůj model/servicu nechápu, protože jen duplikuje systémovou Nette\Http\Session. Mnohem lepší by bylo si ji z kontejneru vytáhnout přímo a nebalit ji do dalšího objektu.

Můžeš s ní pracovat přímo v presenteru, tedy něco jako:
...
public function renderDefault()
{
   $section = $this->context->session->getSection("test");
   $section->test = "test";
}
...
CarlosK
Profil *
Děkuji, netušil jsem, že je to až takhle jednoduché

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: