1

这是我的问题 - 我正在尝试跨操作访问会话命名空间。ZF 示例似乎通过生成新的命名空间来工作,但它们仅在一个操作中演示了这一点 - 但是如何从单独的操作访问现有的命名空间?这是代码:

public function indexAction(){
    $defaultNamespace = new Zend_Session_Namespace('dingdangdoo');

    if (isset($defaultNamespace->numberOfPageRequests)) {
        // this will increment for each page load.
        $defaultNamespace->numberOfPageRequests++;
    } else {
        $defaultNamespace->numberOfPageRequests = 1; // first time
        }

    echo "Page requests this session: ",
    $defaultNamespace->numberOfPageRequests;
}

这很好 - 但如果我想创建另一个控制器/操作对,我将如何访问 $defaultNamespace->numberOfPageRequests?我是否必须创建 Zend 会话命名空间的新实例?

4

2 回答 2

2

无论您是创建命名空间的单个实例以在整个应用程序中使用,还是创建临时命名空间的实例,这完全取决于您。

当您创建 Zend_Session_Namespace 的一个实例时,您真正要做的就是为特定于一个“命名空间”的 $_SESSION 超全局获取一个标准接口。sueprglobal 中的“命名空间”只是 $_SESSION 值数组的关联键。因此,当您使用命名空间实例修改任何数据时,这些修改对指向该特定命名空间的 Zend_Session_Namespace 的所有实例都可用。

我更喜欢保持一切简单,所以我只扩展 Zend_Controller_Action 并在 preDispatch 方法中处理身份验证、授权和任何会话创建。然后我只是通过将命名空间设置为 My_Controller_Action 的属性来使所有操作都可用。

于 2009-11-06T11:44:44.360 回答
0

我遵循的方法是在引导程序中设置命名空间,以便它在整个应用程序中可用。您可以从任何您想要的控制器/操作访问它。

于 2010-12-19T20:20:46.370 回答