Phalcon php未定义变量会话

时间:2014-04-30 13:56:04

标签: php session undefined phalcon

我正在研究Phalcon,我正在尝试将用户名设置为会话OOP Phalcon样式。这是我在控制器中的内容:

$users = Users::find(array($conditions, 'bind' => $parameters));
            if (count($users) > 0) {
                //login
                $this->session->start();
                $this->session->set("username", $username);
                $this->view->successMessage = "You are logged in";

            }

这是loginAction的一大块。如果我print_r($ _ SESSION);在login.volt(用户在登录操作后被重定向)它打印出会话,但在其他视图中,当我尝试打印会话时,我得到一个错误:未定义的变量会话。 在我的services.php中我有

$di->setShared('session', function() {
    $session = new Phalcon\Session\Adapter\Files();
    $session->start();
    return $session;
});

非常感谢任何帮助

修改 让我这样说吧。在普通的PHP我可以做这样的事情:     用户名;     ?>

然后在视野中我可以做类似的事情:

 <?php 
        if (isset($_SESSION['username']))  
             {  
                echo '<input type="submit" name="Button" value="button"'; 
             }
 ?>

Phalcon中的等效物是什么?

1 个答案:

答案 0 :(得分:0)

当您通过DI::getShared('session')检索共享服务时(在控制器中通过$this->session进行检索),它将为您启动会话,因此无需再次手动启动它。文档中的Here几乎就是你应该如何做的。

另一点是,最有意义的是使用session bagpersistent storage,第二种方法使用与会话包相同的实现方式,但却是一种捷径。

实际上,关于在视图中检索会话数据的有效点并不少 - 您应该将其作为视图变量传递,而不是在视图中实现该逻辑(如果您想要更多适当的Phalcon方式) 。我错过了关于print_r($_SESSION)的部分。你真的可以$this->view->setVar('myValue', 'my session value');看看它是否适用于其他视图/控制器。

要在一个地方为会话包设置值:

$users = Users::find(array($conditions, 'bind' => $parameters));
    if (count($users) > 0) {
        $user           = new Phalcon\Session\Bag('user');
        $user->username = $username;
    }
}

然后将其检索到另一个控制器中的其他位置并将其作为变量传递给视图:

$user = new Phalcon\Session\Bag('user');
$this->view->setVar('userName', $user->username);

然后在volt view打印它:

{% if username %}
    <input type="submit" name="Button" value="{{ username }}">
{% endif %}