CakePHP не может связаться с CakeSession из lib

Я добавил библиотеку под названием MyLib, внутри моего App/Lib папка в CakePHP 2.5.5:

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

Решение

У вас есть опечатка при загрузке вашей библиотеки.

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

1

Другие решения

У меня была похожая проблема. Это уродливое решение, но оно помогло в моем случае. Попробуйте добавить приложение :: использует в методе. Что-то вроде этого:

class MyController2 {

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

Я почти уверен, что у вас есть проблема в другом месте вашего кода, которую вы не показываете нам (я думаю, вы показали здесь пример кода, который не является вашим реальным кодом).

Я проверил с вашим точным кодом, и оба контроллера показывают точно так же. Нет абсолютно никакой причины, по которой один контроллер будет показывать что-то другое, если только этот контроллер не содержит чего-то другого, чего нет у другого.

1