CakePHP在过滤前设置值

时间:2011-11-04 07:06:45

标签: php cakephp

我正在使用Cakephp1.3,我试图在beforeFilter函数下的app_controller.php中设置值这里是我的代码。

function beforeFilter() {

  $sess =  $this->Session->read();

  if(isset($sess['Auth']['User'])) {
  $checkLogin = 1; 
  }
  else { $checkLogin=0; }

  $this->set('checkLogin',$checkLogin);

  //$this->Auth->authorize = 'actions';        
  $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');        
  $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'index');
  $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');        
 }

现在我想访问user_controller.php中的Checklogin值

我试过这个

function beforeFilter() {
    parent::beforeFilter();
     echo $checkLogin; exit;
    $this->Auth->allow(array('users' => 'login'));
    $this->Auth->authorize = 'controller';

     } 

我收到了这个错误

  

未定义的变量:: checklogin()

请告诉我这个解决方案

提前致谢

2 个答案:

答案 0 :(得分:4)

您必须使用不是本地的实例变量。而不是

$checkLogin

使用

$this->checkLogin

在两个控制器中都能正常工作。

示例:

class AbstractUser{
    function __construct(){
        $this->instanceVar = true;
        $localVar = true;
    }
}


class User extends AbstractUser{
    function __construct(){
        parent::__construct();
    }

    function useVariables(){
        var_dump(isset($this->instanceVar));  # returns true
        var_dump(isset($localVar));           # returns false
    }
}

$user = new User;

$user->useVariables();

修改

更新了示例,使其更像您的用例。

答案 1 :(得分:1)

除非您将其设为全局变量,否则无法访问checkLogin。请检查variable scope  用PHP。