Хранение данных сеанса - PullRequest
       8

Хранение данных сеанса

1 голос
/ 21 сентября 2011

У меня есть риторический вопрос относительно хранения данных сеанса в Symfony. Мы можем хранить данные сеанса как переменные:

// The First Example
$this->getUser()->setAttribute('hash', $hash);
$this->getUser()->setAttribute('name', $name);

Или как массив:

// The Second Example
$this->getUser()->setAttribute('something'
    , array('hash' => $hash,'name' => $name));

В первом примере мы можем использовать hasAttribute ('name'), чтобы проверить, установлено ли оно, а во втором примере нам понадобятся две строки кода для такой проверки. Например. Такие методы, как hasAttribute ('name'), не будут работать:

$something = $this->getUser()->getAttribute('something');
if($something['name']) //...

Кроме того, для установки нового значения переменной требуется больше строк:

$something['name'] = 'New value';
$this->getUser()->setAttribute('something', $something);

Но преимуществом наличия массивов для хранения сессий является возможность очистки всего массива сразу.

Может быть, можно манипулировать массивами лучшим способом, о котором я не знаю? Или, может быть, я ошибаюсь в своих высказываниях вообще ... Какова лучшая практика?

1 Ответ

3 голосов
/ 21 сентября 2011

Вы можете добавить пространство имен для хранения ваших данных:

$this->getUser()->setAttribute($name, $value, $namespace);

А для извлечения данных вам также необходимо использовать пространство имен:

$this->getUser()->getAtrribute($name, $default, $namespace);

И вы можете проверить, есть ли у пользователя атрибут с пространством имен:

$this->getUser()->hasAttribute($name, $namespace);

И Symfony будет хранить значения в пространстве имен в виде массива.

...