Пользовательский обработчик сессий на CakePHP 2.0.2 - PullRequest
1 голос
/ 17 февраля 2012

я попытался следовать из http://book.cakephp.org/2.0/en/development/sessions.html#creating-a-custom-session-handler, тогда я не могу решить эту проблему, и я действительно запутался в этом: (

стало так:

<?php
App::uses('DatabaseSession', 'Model/Datasource/Session');

class CartSession implements CakeSessionHandlerInterface {
    public $cacheKey;

    public function __construct() {
        $this->cacheKey = Configure::read('Session.handler.cache');
        parent::__construct();
    }

    // read data from the session.
    public function read($id) {
        $result = Cache::read($id, $this->cacheKey);
        if ($result) {
            return $result;
        }
        return parent::read($id);
    }

    // write data into the session.
    public function write($id, $data) {
        $result = Cache::write($id, $data, $this->cacheKey);
        if ($result) {
            return parent::write($id, $data);
        }
        return false;
    }

    // destroy a session.
    public function destroy($id) {
        $result = Cache::delete($id, $this->cacheKey);
        if ($result) {
            return parent::destroy($id);
        }
        return false;
    }

    // removes expired sessions.
    public function gc($expires = null) {
        return Cache::gc($this->cacheKey) && parent::gc($expires);
    }
}

?>

Ошибка вывода:

Fatal error: Class CartSession contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (CakeSessionHandlerInterface::open, CakeSessionHandlerInterface::close) in /Users/user/Sites/app/shop/Model/Datasource/Session/CartSession.php on line 43

Я добавил в core.php:

Configure::write('Session', array(
        'defaults' => 'database',
        'handler' => array(
            'engine' => 'CartSession',
            'model' => 'Session',
            'cache' => 'apc'
        )
    ));

 Cache::config('apc', array('Engine' => 'Apc'));

1 Ответ

0 голосов
/ 23 августа 2012

Вам нужно продлить DatabaseSession. Таким образом, объявление вашего класса будет выглядеть так:

class CartSession extends DatabaseSession implements CakeSessionHandlerInterface

...