Есть ли способ доступа к текущему сеансу в классе AppModel
?
Я хочу сохранить идентификатор текущего пользователя в почти каждом действии INSERT/UPDATE.Доступ к сеансу в модели
ответ
Найдено рабочее решение для CakePHP 2 здесь: Reading a session variable inside a behavior in cakephp 2
Это мой AppModel:
<?php
class AppModel extends Model {
public function beforeSave() {
parent::beforeSave();
if (isset($this->_schema['user_id'])) {
// INSERT
if (!strlen($this->id)) {
App::uses('CakeSession', 'Model/Datasource');
$user_id = CakeSession::read('Auth.User.id');
$this->data[$this->alias]['user_id'] = $user_id;
// UPDATE, don't change the user_id of the original creator.
} else {
unset($this->data[$this->alias]['user_id']);
}
}
return true;
}
}
Если вы звоните спасает от контроллера, вы можете просто включить данные сессии в данных, которые вы назначаете к вашей модели до сохранения:
$data['ModelName']['session_id'] = $this->Session->id;
$this->ModelName->save($data);
Или вы можете создать переменную в вашей модели и хранить идентификатор там для последующего использования:
<?php
//in model
class MyModel extends AppModel{
public $session_id;
}
//in controller
$this->MyModel->session_id = $this->Session->id;
?>
Если необходимо использовать компонент в вашей модели, то вы можете быть в состоянии загрузить его. Я не уверен, что это сработает. Это не хорошая практика, и вам, вероятно, стоит подумать об этом по-другому.
<?php
App::uses('CakeSession', 'Model/Datasource');
class MyModel extends AppModel{
public function beforeSave(){
$this->data['session_id'] = $this->Session->id;
return true;
}
}
?>
В CakePHP 2.x вы можете использовать AuthComponent статически и получить вошедшего пользователя ID в модели следующим образом:
$userId = AuthComponent::user('id');
Ничего себе! Звучит хорошо! – powtac
- 1. Доступ к сеансу Переменная
- 2. Доступ к сеансу в конце?
- 3. Доступ к сеансу в flask_wtf
- 4. Как получить доступ к сеансу в модели asp.net mvc
- 5. Spring webflow - доступ к сеансу
- 6. Доступ к «сеансу» с фильтра
- 7. Доступ к сеансу изнутри socket.io
- 8. Rails: доступ к сеансу в Initializer
- 9. доступ к сеансу laravel в стороннем плагине
- 10. Доступ к сеансу в командной строке PHP?
- 11. Доступ к сеансу telnet в python
- 12. Как получить доступ к сеансу в __construct?
- 13. Доступ к сеансу cookie в scrapy spiders
- 14. Доступ к сеансу в объекте домена
- 15. Доступ к сеансу в спецификации API
- 16. Доступ к сеансу в модуле экспресс-узла
- 17. Доступ к сеансу пользователя из бэкэнд
- 18. Доступ к сеансу другого веб-приложения
- 19. Доступ к сеансу MVC с веб-службы
- 20. Не удалось получить доступ к сеансу рельсов
- 21. Доступ к сеансу CherryPy из дочерней нити?
- 22. Grails - У служб есть доступ к сеансу?
- 23. Доступ к сеансу напрямую и другие способы
- 24. .NET Многопоточный доступ к сеансу общего входа
- 25. Доступ к сеансу через субдомены (Rails 4)
- 26. Не удалось получить доступ к сеансу
- 27. Запросить разрешение на доступ к сеансу
- 28. Как получить доступ к сеансу из DS.RESTAdapter?
- 29. Доступ к сеансу весеннего инъецируемого EntityManager
- 30. Доступ к сеансу с Spring Web Flow
Согласно моему третьему варианту, только потому, что вы можете сделать Ты не хочешь. –