2014-07-05 4 views
0

Conected 사용자의 ID를 MainController의 정적 변수에 저장하고 있지만 다른 컨트롤러에서이 변수에 액세스해야합니다. 변수에서 값을 가져 오려고하면 결과가 항상 변수의 초기 값이됩니다. 심지어 변수를 이미 수정 한 경우에도 마찬가지입니다.CakePHP를 사용하는 PHP의 정적 변수/메소드

class MainController extends AppController { 
    //... 
    public static $loggedClienteId; 

    //functions 

    public function loginCliente(){ 
     //code... 
     self::$loggedClienteId = $cliente['Cliente']['id']; 
     var_dump(MainController::$loggedClienteId); //returns the correct value. 
     return $this->redirect(array('controller' => 'clientes', 'action' => 'index')); 
    } 
} 

그래서, 다른 컨트롤러에 ...

는 "MainController.php"를 포함;

class ClientesController extends AppController { 
    public $helpers = array('Html', 'Form'); 

    public function index() { 
     var_dump(MainController::$loggedClienteId); //null, althought it already has a value... 
     $this->set('clientes', $this->Cliente->find('all')); 
    } 
    //functions... 
} 

왜 그런가?

답변

1

$this->Auth->user('id')을 사용하면 현재 로그인 한 사용자의 ID를 가져올 수 있습니다.

코드가 작동하지 않는 이유는 로그인 작업에 대한 요청이 완료되면 스크립트가 종료 되었기 때문입니다. 변수 설정은 요청간에 지속되지 않습니다. 세션에 변수를 저장해야합니다.

사용자가 로그인 한 사용자의 ID가 아닌 경우 SessionComponent을 사용하고 $this->Session->write('key', 'value');을 사용하고 다른 요청/컨트롤러 $this->Session->read('key');에서 읽는 것입니다.

+0

변경된 값을 페이지 전체에 유지할 필요가없는 경우 값 저장 및 검색을위한 클래스 구성을 통해 읽고 쓸 수 있습니다. 정적 해킹이 필요하지 않습니다. – mark