2015-04-15 2 views
3

Я видел много вопросов по StackOverflow и у меня есть этот кодКонтейнер сеанса, не работающий в zf2?

use Zend\Session\Container; 

class IndexController extends AbstractActionController { 

public function indexAction() { 

    $userSession = new Container('user'); 
    $userSession->username = 'Sandhya'; 
    return new ViewModel(); 
    } 
} 

Когда я печать $userSession контейнера в контроллере он дает мне этот выход

Zend\Session\Container Object ( 
    [name:protected] => user 
    [manager:protected] => Zend\Session\SessionManager Object (
     [defaultDestroyOptions:protected] => Array ( 
      [send_expire_cookie] => 1 
      [clear_storage] => 
     ) 
     [name:protected] => 
     [validatorChain:protected] => 
     [config:protected] => Zend\Session\Config\SessionConfig Object (
      [phpErrorCode:protected] => 
      [phpErrorMessage:protected] => 
      [rememberMeSeconds:protected] => 240 
      [serializeHandler:protected] => 
      [validCacheLimiters:protected] => Array (
       [0] => nocache 
       [1] => public 
       [2] => private 
       [3] => private_no_expire 
      ) 
      [validHashBitsPerCharacters:protected] => Array ( 
       [0] => 4 
       [1] => 5 
       [2] => 6 
      ) 
      [validHashFunctions:protected] => 
      [name:protected] => 
      [savePath:protected] => 
      [cookieLifetime:protected] => 2592000 
      [cookiePath:protected] => 
      [cookieDomain:protected] => 
      [cookieSecure:protected] => 
      [cookieHttpOnly:protected] => 1 
      [useCookies:protected] => 1 
      [options:protected] => Array ( 
       [gc_maxlifetime] => 2592000 
      ) 
     ) 
     [defaultConfigClass:protected] => Zend\Session\Config\SessionConfig  
     [storage:protected] => Zend\Session\Storage\SessionArrayStorage Object (
     ) 
     [defaultStorageClass:protected] => Zend\Session\Storage\SessionArrayStorage 
     [saveHandler:protected] => 
    ) 
    [storage:protected] => Array () 
    [flag:protected] => 2 
    [iteratorClass:protected] => ArrayIterator 
    [protectedProperties:protected] => Array ( 
     [0] => name 
     [1] => manager 
     [2] => storage 
     [3] => flag 
     [4] => iteratorClass 
     [5] => protectedProperties 
    ) 
) 

Это означает, что нет ничего подобного username ...

Но когда я печать S_SESSION это дает мне этот выход ...

Array ( 
    [__ZF] => Array ( 
     [_REQUEST_ACCESS_TIME] => 1429081041.81 
    ) 
    [user] => Zend\Stdlib\ArrayObject Object ( 
     [storage:protected] => Array ( 
      [username] => Sandhya 
     ) 
     [flag:protected] => 2 
     [iteratorClass:protected] => ArrayIterator  
     [protectedProperties:protected] => Array ( 
      [0] => storage 
      [1] => flag 
      [2] => iteratorClass 
      [3] => protectedProperties 
     ) 
    ) 
) 

Существует поле username ...

Но когда я пытаюсь получить $_SESSION в виду это дает мне тот же результат, что и выше ..

Проблема в том, что я не в состоянии получите username как в контейнере, так и в $_SESSION. Мне это нужно в контроллерах. Какая проблема может понадобиться? Спасибо.

+0

Вы хотите, чтобы это имя пользователя появилось на виду? –

+0

Нет, я хочу этого в контроллерах –

+0

Хорошо, я отправляю ответ, который поможет вам. –

ответ

0

Вы можете использовать следующий код:

$userSession = new Container('user'); 
//To check the session variable in zf2: 
if($userSession->offsetExists('username')){ 
    //Your logic after check condition 
} 

Это возвращает истину или ложь на основе сессии существует или нет.

//To get the value of session: 
echo $user->offsetGet('username'); 

Приведенный выше код возвращает значение индекса username сессии.

Вместо $userSession->username = 'Sandhya'; вы можете использовать ниже код:

$user->offsetSet('username','Sandhya'); 

Это стандартный ZF2, который используется сессии контейнера в ZF2.

+0

echo $ userSession-> offsetExists ('username'); ничего не давая в другом контроллере. –

+0

@SandhyaGor сначала использует '$ userSession = new Container ('user');' then echo it. –

+0

У меня все еще есть –

1

Думаю, вам нужно работать над вашей конфигурацией. Вам необходимо настроить общий SessionManager для управления обработкой информации о сеансе.

Что-то вроде этого:

$sessionConfig = new SessionConfig(); 
$sessionConfig->setOptions($config); 
$sessionManager = new SessionManager($sessionConfig); 
$sessionManager->start(); 
Container::setDefaultManager($sessionManager); 

Я хотел бы предложить регистрации вашей SessionManager конфигурации в вашем экземпляре ServiceManager, а затем использовать его по всему приложению.

'service_manager' => array(
    'factories' => array(
     'session_manager' => 'My\Factory\SessionManagerFactory' 
    ) 
) 

Вы можете получить SessionManager в любом контроллере:

$sessionManager = $this->serviceLocator->get('session_manager'); 

И если вы создаете новый Container он будет использовать ваш экземпляр общий/по умолчанию SessionManager автоматически, так что все будет управляться в одном месте.

$userSession = new Container('user'); 
$userSession->getManager() === $this->serviceLocator->get('session_manager') // true 

О том, как зарегистрировать SESSION_MANAGER я сошлюсь the official ZF2 documentation.

+0

Я уже установил эту конфигурацию, но не создал экземпляр ServiceManager, потому что это хороший способ, но все еще проблема. Я установил другой пакет Zend в том, что контейнер работает отлично. Но теперь мне нужно скопировать весь код к новому пакету. Так что я думаю, что проблема была в пакете. –

0

вы можете просто получить свое имя пользователя из сеанса в контроллерах.

$userSession = new Container('user'); 
$username = $userSession->username ; 
var_dump($username); //Sandhya 

это работает для меня. попробуй !

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