wtorek, 9 września 2008

Symfony user managmet and sessions

Sesje użytkowników są przechowywane w symfony w obiekcie User. Możemy pobrać ten obiekt w dowolnym miejscu za pomocą metody getUser();


class mymoduleActions extends sfActions
{
public function executeFirstPage()
{
$nickname = $this->getRequestParameter('nickname');

// Store data in the user session
$this->getUser()->setAttribute('nickname', $nickname);
}

public function executeSecondPage()
{
// Retrieve data from the user session with a default value
$nickname = $this->getUser()->getAttribute('nickname', 'Anonymous Coward');
}
}


Oczywiście w tym obiekcie możemy przechowywać obiekty (niezalecane) i zmienne które będą dostępne pomiędzy wywołaniami stron.

Zmienne możemy ustawiać, pobierać i czyścić


class mymoduleActions extends sfActions
{
public function executeRemoveNickname()
{
$this->getUser()->getAttributeHolder()->remove('nickname');
}

public function executeCleanup()
{
$this->getUser()->getAttributeHolder()->clear();
}
}


Do sesji użytkownika możemy dobrać się także z szablonów



Hello, getAttribute('nickname') ?>




Jeśli potrzebujemy przechować informację tylko do kolejnego wywołania, np potwierdzenie zapisania/usunięcia/edycji danych możemy skorzystać z metody setFlash i getFlash. Dane zapisane za pomocą tych metod zostaną usunięte przy kolejnym wywołaniu.
np.

$this->setFlash('attrib', $value);
$value = $this->getFlash('attrib');

// i w szablonach

has('attrib')): ?>
get('attrib') ?>



Ciasteczka

W symfony możemy decydować gdzie zapisane są ciasteczka. Określamy to w pliku apps/myapp/config/factories.yml


all:
storage:
class: sfSessionStorage
param:
session_name: my_cookie_name


Po stronie aplikacji sesje są przechowywane domyślnie w plikach. Możemy to zmienić w pliku apps/myapp/config/factories.yml


all:
storage:
class: sfMySQLSessionStorage
param:
db_table: SESSION_TABLE_NAME # Name of the table storing the sessions
database: DATABASE_CONNECTION # Name of the database connection to use


Czas przechowywania sesji można ustawić w pliku apps/myapp/config/settings.yml


default:
.settings:
timeout: 1800 # Session lifetime in seconds

Brak komentarzy: