【问题标题】:CakePHP unable to reach CakeSession from libCakePHP 无法从 lib 访问 CakeSession
【发布时间】:2014-11-04 21:14:53
【问题描述】:

我在 CakePHP 2.5.5 的 App/Lib 文件夹中添加了一个名为 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());

  }
}

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

【问题讨论】:

  • 你在哪里写'Config.language'到会话?
  • 由于两个控制器之间的结果不同,这可能是 beforeFilter() 不调用其父 beforeFilter() 在 AppController 中定义的经典问题,这会做一些必要的事情,以便你的库工作吗?

标签: php cakephp cakephp-2.5


【解决方案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

【讨论】:

  • 谢谢。我在复制粘贴时犯了错字,但问题不是错字。
【解决方案2】:

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

class MyController2 {

   function myAction2(){
    App::uses('MyLib', 'Lib');
    echo MyLib::myfunction1();
    print_r(MyLib::myfunction2());
   }
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2010-12-10
      • 2015-11-28
      相关资源
      最近更新 更多