2012-01-04 54 views
16

Có cách nào để truy cập phiên hiện tại trong lớp AppModel không?
Tôi muốn lưu ID của người dùng hiện đã đăng nhập vào hầu hết mọi hành động INSERT/UPDATE.Truy cập phiên trong Mẫu

Trả lời

16

Tìm thấy một giải pháp làm việc cho CakePHP 2 ở đây: Reading a session variable inside a behavior in cakephp 2

Đây là AppModel tôi:

<?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; 
    } 
} 
+1

Theo tùy chọn thứ 3 của tôi, chỉ vì bạn có thể làm không có nghĩa là bạn nên. –

9

Nếu bạn đang gọi tiết kiệm từ một bộ điều khiển, bạn chỉ có thể bao gồm các dữ liệu phiên trong các dữ liệu mà bạn gán cho mô hình của bạn trước khi tiết kiệm:

$data['ModelName']['session_id'] = $this->Session->id; 
$this->ModelName->save($data); 

Hoặc bạn có thể tạo một biến trong mô hình của bạn và lưu trữ ID ở đó để sử dụng sau:

<?php 
//in model 
class MyModel extends AppModel{ 
    public $session_id; 
} 


//in controller 
$this->MyModel->session_id = $this->Session->id; 
?> 

Nếu bạn phải sử dụng thành phần trong mô hình của mình thì bạn có thể tải nó. Tôi không chắc chắn nếu điều này sẽ làm việc mặc dù. Đây không phải là thực hành tốt và bạn có lẽ nên xem xét thực hiện nó theo một cách khác.

<?php 

App::uses('CakeSession', 'Model/Datasource'); 

class MyModel extends AppModel{ 
    public function beforeSave(){ 
     $this->data['session_id'] = $this->Session->id; 

     return true; 
    } 
} 

?> 
10

Trong CakePHP 2.x bạn có thể sử dụng AuthComponent tĩnh và nhận được đăng nhập ID của người dùng trong mô hình như sau:

$userId = AuthComponent::user('id'); 
+0

Wow! Nghe hay đấy! – powtac

Các vấn đề liên quan