0

在我的项目中,我使用以下代码通过服务中的会话包访问会话变量:

public function __construct()
{
    // Create session bag
    $className = get_class($this);
    $this->storage = new Phalcon\Session\Bag($className);    
}

但这给出了一个例外“访问'会话'服务需要依赖注入对象”。

好的,看来我们需要在这里设置一个DI。最简单的方法 - 在 DI 中定义不共享的 sessionBag 服务(然后将自动设置 $di)。但是我怎么能理解我应该以这种方式为会话包设置哪个名称?例子:

$di->set('sessionBag', function() use ($config) {
    $name = ''; // ???
    $bag = new \Phalcon\Session\Bag($name);
    return $bag;
});      
4

2 回答 2

1

您可以让您的类继承自 Phalcon\DI\Injectable,当您访问持久性属性时,会隐式创建会话包:

class MyComponent extends Phalcon\DI\Injectable
{

    public function someMethod()
    {
        $this->persistent->someName = "peter";
    }

}
于 2013-02-01T18:54:33.903 回答
0

//Start the session the first time when some component request
// the session service
$di->setShared('session', function() {
    $session = new Phalcon\Session\Adapter\Files();
    $session->start();
    return $session;
});

例子:

auth.php:

public function __construct(){
    $this->_di = \Phalcon\DI::getDefault ();
    $this->user       = new \Phalcon\Session\Bag(get_class());
    $this->user->setDI($this->_di);
}

/**
 *
 * @param int
 *
 * @return bool
 */
public function authenticate($identity){
    $this->user->identity=$identity;
}
/**
 * @return boolean
 */
public function isAuthenticate(){
    return $this->user->identity?true:false;
}
于 2013-11-30T04:00:42.497 回答