2013-08-02 1 views
0

J'essaie d'utiliser DbTableGateway pour stocker mes informations de session dans une base de données MySQL - mais ma table "sessions" reste vide. Il ne contient jamais de lignes. Voici mon code (plus ou moins copier/coller de here):DbTableGateway n'écrit pas mes informations de session dans la table de base de données

$dbAdapter = new Zend\Db\Adapter\Adapter(array(
    'driver' => 'pdo_mysql', 
    'database' => 'db-name', 
    'username' => 'username', 
    'password' => 'password!' 
)); 
$tableGateway = new \Zend\Db\TableGateway\TableGateway('session', $dbAdapter); 
$saveHandler = new \Zend\Session\SaveHandler\DbTableGateway($tableGateway, new \Zend\Session\SaveHandler\DbTableGatewayOptions()); 
$manager = new \Zend\Session\SessionManager(); 
$manager->setSaveHandler($saveHandler); 

$someContainer = new Container('SomeSessionNamespace'); 
$someContainer->aBitOfData = 'tasty morsel of data'; 

Et voici une démonstration vidéo de moi en utilisant ce code: http://screencast.com/t/UDDUs6OZOib

Comme vous pouvez le voir dans la vidéo, les informations de session est préservée entre les demandes, mais il n'est pas stocké dans la base de données.

J'ai ajouté des points d'arrêt à chaque fonction dans Zend\Session\SaveHandler\DbTableGateway, et le seul qui est touché est dans __constructor. Donc, le constructeur est appelé, mais apparemment il ne sert à rien d'autre.

Qu'est-ce qui me manque? J'utilise Zend Framework 2.2.2 sur PHP 5.3.

-Josh

Répondre

1

J'ai trouvé quelques modules pour le faire si vous avez besoin de mettre en œuvre cette rapidement

  1. https://github.com/Nitecon/DBSessionStorage
  2. https://github.com/gabriel403/G403SessionDb

Pour utiliser votre code actuel, s'il vous plaît vérifier:

  • options ** DbTableGatewayOptions ** (id, données, durée de vie, etc ..)

    $options = new \Zend\Session\SaveHandler\DbTableGatewayOptions(); 
    $options->setDataColumn('data'); 
    $options->setIdColumn('id'); 
    $options->setLifetimeColumn('lifetime'); 
    $options->setNameColumn('name'); 
    $options->setModifiedColumn('modified'); 
    
  • le début vous SessionManager $ manager-> start();

+0

Appréciez les suggestions, et je peux avoir cette route, mais je voudrais vraiment lik e pour comprendre pourquoi 'Zend \ Session \ SaveHandler \ DbTableGateway' ne fonctionne pas car je l'ai configuré. – Josh

+0

Je mets à jour ma réponse ci-dessus. –

+0

J'ai essayé d'ajouter '$ manager-> start()'. Pas de changement. Puis j'ai essayé '$ manager-> start (true)'. Toujours pas de changement. Et je ne passe pas d'options à DbTableGatewayOptions. Je fais la même chose que dans la documentation de ZF, liée à dans ma question. Mais peut-être que la documentation est incomplète. Comment suis-je censé configurer l'objet DbTableGatewayOptions? – Josh

0

Arrivée application.config.php et assurez-vous que le module d'application est au niveau supérieur

Assurez-vous également que 'vendor/composer/autoload_namespaces.php' et 'vendor/composer/autoload_static.php' zend et le chemin de la bibliothèque zendxml ajouté ou non

par exemple: 'Zend' => array(vendorDir . '/ZF2/library'), 'ZendXml' => array(vendorDir . '/ZF2/library')

Questions connexes