2009-11-06 3 views
1

Вот моя проблема - Я пытаюсь получить доступ к пространству имен сеанса через действия. Примеры ZF, похоже, работают, создавая новые пространства имен, но они демонстрируют это только в одном действии, но как мне получить доступ к существующему пространству имен из отдельного действия? Вот код:Доступ к данным сеанса Zend между действиями

public function indexAction(){ 
    $defaultNamespace = new Zend_Session_Namespace('dingdangdoo'); 

    if (isset($defaultNamespace->numberOfPageRequests)) { 
     // this will increment for each page load. 
     $defaultNamespace->numberOfPageRequests++; 
    } else { 
     $defaultNamespace->numberOfPageRequests = 1; // first time 
     } 

    echo "Page requests this session: ", 
    $defaultNamespace->numberOfPageRequests; 
} 

Это хорошо - но если я хочу сделать еще пару контроллеров/действий, как бы я получить доступ к $ defaultNamespace-> numberOfPageRequests? Должен ли я создать новый экземпляр Zend Session Namespace?

ответ

2

Создаете ли вы один экземпляр пространства имен, который будет использоваться во всем приложении, или создавайте экземпляры пространства имен ad hoc, это действительно зависит от вас.

Когда вы создаете экземпляр Zend_Session_Namespace, все, что вы действительно делаете, это получение стандартного интерфейса в суперглобальном файле $ _SESSION, специфичном для одного пространства имен. «Namespace» в sueprglobal является всего лишь ассоциативным ключом для массива значений $ _SESSION. Поэтому, когда вы изменяете любые данные с помощью экземпляра пространства имен, изменения доступны для всех экземпляров Zend_Session_Namespace, которые указывают на это конкретное пространство имен.

Я предпочитаю хранить все просто, поэтому я просто расширяю Zend_Controller_Action и в методе preDispatch обрабатываю аутентификацию, авторизацию и любое создание сеанса в целом. Затем я просто создаю пространства имен для всех действий, установив их как свойства My_Controller_Action.

+0

спасибо, что помогло мне разобраться с проблемой. Я предполагаю, что если я хочу обмениваться данными между контроллерами, мне нужно будет установить пространство имен в бутстрапе. – sunwukung

0

Подход, который я придерживаюсь, заключается в том, чтобы установить пространство имен в бутстрапе, чтобы оно имелось в приложении. Вы можете получить доступ к нему с любого контроллера/действия, которое вы хотите.

Смежные вопросы