这是我的问题 - 我正在尝试跨操作访问会话命名空间。 ZF示例似乎通过生成NEW命名空间来工作,但它们只在一个操作中演示了这一点 - 但是如何从单独的操作中访问现有命名空间?这是代码:
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;
}
这很好 - 但是如果我想创建另一个Controller / Action对,我将如何访问$ defaultNamespace-> numberOfPageRequests?我是否必须创建Zend会话命名空间的新实例?
答案 0 :(得分:2)
无论您是创建要在整个应用程序中使用的命名空间的单个实例,还是创建特殊命名空间的实例,它都取决于您。
当您创建Zend_Session_Namespace的实例时,您真正要做的就是获得一个标准接口到$ _SESSION超全局特定于一个'命名空间'。 sueprglobal中的“命名空间”只是$ _SESSION值数组的关联键。因此,当您使用命名空间实例修改任何数据时,修改可用于指向该特定命名空间的Zend_Session_Namespace的所有实例。
我更喜欢保持一切简单,所以我只是扩展Zend_Controller_Action,在preDispatch方法中,我处理身份验证,授权和任何会话创建。然后我通过将它们设置为My_Controller_Action的属性来使命名空间可用于所有操作。
答案 1 :(得分:0)
我遵循的方法是在引导程序中设置命名空间,使其在整个应用程序中可用。您可以从任何所需的控制器/操作中访问它。