我正在学习Phalcon,并试图将username设置为会话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的一大块。如果我打印_r($_SESSION(;在login.volt(用户在登录操作后被重定向(中,它打印出会话,但在其他视图中,当我尝试打印会话时,我会收到一个错误:未定义的变量会话。在我的服务中.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中的等价物是什么?
当您通过DI::getShared('session')
检索共享服务时(在您的情况下,通过$this->session
在控制器中(,它将为您启动会话,因此无需再次手动启动。在文档中,这里几乎是你应该怎么做的。
另一点是,使用会话包或持久存储最有意义,其次使用与会话包相同的实现,但有点快捷。
实际上,在视图中检索会话数据也是一个有效的观点——你应该将其作为视图变量传递,而不是在视图中实现该逻辑(如果你想要更多正确的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);
然后在伏特视图中打印它:
{% if username %}
<input type="submit" name="Button" value="{{ username }}">
{% endif %}