Как мне создавать, записывать и читать данные сеанса в CakePHP?
-
11-09-2019 - |
Вопрос
может ли кто-нибудь дать мне пример того, как создавать сеансы и записывать в них данные.Я видел синтаксис того, как записывать данные в сеанс с помощью команды записи.Но как создать сеанс и получить в нем значения.
В моем приложении есть два данных: form_id и user_id, которые необходимо использовать во всех запросах страниц.Итак, как мне сохранить ее как переменную сеанса и использовать во всем приложении?
РЕДАКТИРОВАТЬ
function register()
{
$userId=$this->User->registerUser($this->data);
$this->Session->write('User.UserId',$userId);
//echo "session".$this->Session->read('User.UserId');
$this->User->data=$this->data;
if (!$this->User->validates())
{
$this->Flash('Please enter valid inputs','/forms' );
return;
}
$this->Flash('User account created','/forms/homepage/'.$userId);
}
Как использовать переменную сеанса 'Пользователь.Ид пользователя' вместо $userId в $this->Flash('Учетная запись пользователя создана','/forms/homepage/'.$userId);
И могу ли я использовать эту переменную во всех своих файлах представления, ведь во всех запросах страниц я также передаю идентификатор пользователя?
РЕДАКТИРОВАТЬ 2
У меня есть 2 контроллера: пользователь и форма.Я записываю идентификатор пользователя в переменную сеанса в файлах пользователей._контроллер.У меня есть файл представления с именем homepage.ctp, действие которого находится в form_controller. Теперь, как я могу использовать переменную сеанса, определенную в user_controller на главной странице?Извините, если задаю глупые вопросы.Я просмотрел книгу тортов, но мои сомнения не развеялись.Я также пробую метод проб и ошибок, поэтому, пожалуйста, помогите мне.
РЕДАКТИРОВАТЬ 3
У меня есть переменная сеанса «uid», которая является идентификатором пользователя в действии домашней страницы контроллера.
$this->Session->write('uid',$this->data['Form']['created_by']);
Мне нужна та же переменная в методе проектного действия того же контроллера.Когда я даю
$uid=$this->Session->read('uid');
echo "uid: ".$uid;
значение не отображается.
Могу ли я использовать переменную сеанса в том же контроллере?
Решение 5
Я узнал причину, по которой uid не отображался (отредактируйте 3 часть вопроса).Это произошло из-за глупой ошибки: после закрывающего тега ?> в контроллере был пробел.Теперь он работает нормально.
Другие советы
Пекарня – ваш лучший друг:
http://book.cakephp.org/view/398/Methods
Все операции чтения/записи вашего сеанса принадлежат контроллеру:
$this->Session->write('Person.eyeColor', 'Green');
echo $this->Session->read('Person.eyeColor'); // Green
В торте php вы можете создать такой сеанс
$this->request->session()->write('user_id', 10);
и ты можешь прочитайте значение сеанса вот так
echo $this->request->session()->read('user_id');
Супер Просто!
Вам не нужно писать какой-либо код для создания сеанса, они уже встроены.Затем вы просто используете сеансы чтения и записи, как упоминалось выше.Также смотрите здесь для более подробной информации:
http://book.cakephp.org/2.0/en/core-libraries/comComponents/sessions.htmlИспользуется в контроллерах
http://book.cakephp.org/2.0/en/core-libraries/helpers/session.htmlИспользуется в представлениях
В этом случае это будет:
$this->Flash('User account created','/forms/homepage/'.$this->Session->read('User.UserId'));
и на ваш второй вопрос ответил Джейсон Мий (http://api.cakephp.org/class/session-helper).Вы можете просто использовать это на свой взгляд:
$userId = $session->read('User.UserId');
Медленное и внимательное чтение соответствующих страниц кулинарной книги обычно очень помогает...
когда у меня странное поведение сессии, и это мне помогает.
МОДЕЛЬ:
function clearAllDBCache() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$db->_queryCache = array();
}
`
Получите доступ к своему помощнику SessionHelper в lib/Cake/View/Helper/SessionHelper.php
и добавьте метод:
public function write($name = null) {
return CakeSession::write($name);
}