静态变量/方法在PHP使用CakePHP


Static Variable/Methods in PHP using CakePHP

我将连接用户的ID保存在MainController的静态变量中,但我需要在其他控制器中访问该变量。当我尝试从变量中获取值时,结果总是变量的初始值,即使我已经修改了它。

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...
}

为什么会这样?

使用$this->Auth->user('id')获取当前登录用户的id。

您的代码不能工作的原因是因为一旦完成了登录操作的请求,脚本就结束了。设置变量不会跨请求持续存在。你必须在会话中保存变量。

如果它不是您需要的登录用户的id,您要做的是使用SessionComponent和使用$this->Session->write('key', 'value');并在另一个请求/控制器$this->Session->read('key');中读取它。