Я новичок в Cakephp, и у меня большая проблема с сессиями ...
Что именно происходит
Я начинаю инициализировать сеанс с помощью ajax, вызывающего php-файл (контроллер)
это URL из ajax-> url: http: //domain.com/things/view/0
Я попытался также без ajax, вызвав этот URL:
http: //domain.com/things/view/1
В обоих случаях сессия инициализируется.
Ниже приведен контроллер, который я использую для инициализации сеанса
class ThingsController extends AppController {
var $name = 'Things';
var $components = array('Session');
var $helpers = array('Html', 'Javascript', 'Ajax');
var $uses = null;
function index() {
// preload dynamic data
$this->set('data1', 'content will update here');
$this->set('data2', 'here too');
$this->render('neat');
}
function view($id, $idd) {
if ($idd == 0) {
$this->Session->write('language', 'ro');
} else {
$this->Session->write('language', 'en');
}
if (is_numeric($id)) {
if ($id == 0) {
$this->Session->write('language', 'ro');
} else {
$this->Session->write('language', 'en');
}
}
$this->render('neat');
} //view()
} //ThingsController
Как видите if SESSION['language'] == 0 is ro else is en
Используется правило рутера:
Router::connect('/things/:id/*', array('controller' => 'things', 'action' => 'view',
'things'), array('pass' => 'id'));
Но работает и без этого правила:)
Теперь на странице о работе сессии: http: //domain.com/despre-noi
Я использовал этот рутер:
Router::connect('/despre-noi/*', array('controller' => 'about', 'action' => 'display', 'about'));
А этот контроллер
function display() {
if (isset($_SESSION["language"])) {
$language = $_SESSION["language"];
$this->Session->write('language', $_SESSION["language"]);
} else {
$this->Session->write('language', 'ro');
$language = "ro";
}
include('views/pages/'.$language.'.ctp');
$this->layout = 'default';
$this->About->id = 1;
$this->set('post1', $this - > About - > read());
}
Но на странице партнеров: http: //domain.com/parteneri
Где я использовал этот рутер:
Router::connect('/parteneri/*', array('controller' => 'partner', 'action' => 'display', 'partner'));
и следующий контроллер:
function display() {
if (isset($_SESSION["language"])) {
$language = $_SESSION["language"];
$this->Session->write('language', $_SESSION["language"]);
} else {
$this->Session->write('language', 'ro');
$language = "ro";
}
include('views/pages/'.$language.'.ctp');
$this->layout = 'default';
$this->set('posts', $this - > Partner - > find('all'));
}
это не работает ..
Эти 2 страницы очень похожи с той разницей, что на странице партнера я использовал $this->set('posts', $this->Partner->find('all'));
, а затем с помощью foreach()
я перечисляю элементы и на странице о том, что я читаю строку
$this->About->id = 1;
$this->set('post1', $this->About->read());
Может быть, в этом проблема ... две функции read () против find () .. или это просто совпадение?
Заранее спасибо