4

App/Lib在 CakePHP 2.5.5 的文件夹中添加了一个名为 MyLib 的库:

App::uses('CakeSession', 'Model/Datasource');

class MyLib {

    public static function myfunction1() {
        return CakeSession::read('Config.language');
    }

    public static function myfunction2() {
        return $_SESSION;
    }

}

我在里面定义了它App/Config/bootstrap.php

App::uses('MyLib', 'Lib');

在 MyController1 我这样使用它。
myAction 给出空输出:当我检查时,我看到 MyController1 的会话数据为空。

class MyController1 {

   function myAction1(){

    echo MyLib::myfunction1();
    print_r(MyLib::myfunction2());

   }
}

我还有另一个名为 MyController2 的控制器。
当我使用MyLib::myfunction1()MyController2 时,一切正常。

class MyController2 {

   function myAction2(){

    echo MyLib::myfunction1();
    print_r(MyLib::myfunction2());

  }
}

对于某些控制器/操作,什么会使会话为空?

4

3 回答 3

1

我很确定您的代码中的其他地方存在您没有向我们展示的问题(我猜您在这里展示了一些不是您的真实代码的示例代码)。

我已经用你的确切代码进行了测试,两个控制器都显示完全相同。绝对没有理由为什么一个控制器会显示不同的东西,除非该控制器包含另一个控制器没有的其他东西。

于 2014-11-13T18:30:35.357 回答
1

我有一个类似的问题。这是一个丑陋的解决方案,但它在我的情况下有所帮助。尝试在方法中添加 App::uses。像这样的东西:

class MyController2 {

   function myAction2(){
    App::uses('MyLib', 'Lib');
    echo MyLib::myfunction1();
    print_r(MyLib::myfunction2());
   }
}
于 2014-11-13T11:31:29.197 回答
1

加载库时出现拼写错误。

App::uses('MyLib ', 'Lib');

看到后面的空格了MyLib吗?它应该是:

App::uses('MyLib', 'Lib');

您也在滥用print_r功能。第二个参数告诉函数是否要返回信息而不是打印它。你应该做:

print_r(MyLib::myfunction2());

虽然你也可以这样做:

$my_session = print_r(MyLib::myfunction2(),true);
echo $my_session;

http://php.net/manual/en/function.print-r.php

于 2014-11-07T12:21:38.087 回答