【问题标题】:php global variable is nullphp全局变量为空
【发布时间】:2013-09-20 08:42:58
【问题描述】:

我的班级中有一个protected $headers 变量,它使用函数赋值

public function actionLogIn()
{
$userCode = Input::get('username');
$password = Input::get('password'); 
$loginData = array(
    'code' => $userCode,
    'passkey' => $password
);
$loginData = json_encode($loginData);   
$this->headers = Auth::login($loginData);//Modified login method
if(! is_null($this->headers))
{
    return View::make('forms.welcome')->with('title', 'Welcome');
}else{
    echo "Invalid access!";
}
}

当我使用print_r($this->headers); 时,它会成功打印出我需要的值, 但是当我尝试使用该函数访问$this->headers 时:

public function actionLogOut()
{
    if(is_null($this->headers)){
        echo "is null", "\n";
    }//for checking only
    Auth::logout($this->headers);
}

$this->headers 为空。可能是什么问题呢 ? $headers 实际上也是一个数组。谢谢!

【问题讨论】:

  • 你能添加一些代码吗?
  • $this->headers can 为 null,鉴于您在此处显示的代码,如果您在调用 actionLogIn 之前调用 actionLogOut...所有对象都在响应发送给客户端
  • @EliasVanOotegem 但首先调用 actionLogIn。关于这一点,什么是最好的解决方案?在我不必使用 Sessions 的条件下
  • @shin-shan:在同样的请求中?所以用户登录,然后在一个请求中注销?为什么不使用会话?
  • @EliasVanOotegem 哦,对不起,我刚刚编辑了我的评论

标签: php function laravel global-variables laravel-4


【解决方案1】:

为每个请求创建一个新的控制器实例。这意味着即使您将信息存储在 $this 中,当用户请求新页面时它也不存在。

您想要做的是将数据存储在请求之间不会改变的东西中 - 无论是在会话中还是在 cookie 中。

在会话中,它看起来像这样:(警告 - 未经测试的代码)

public function actionLogIn() {
  ...
  $loginData = json_encode($loginData);   
  $user = Auth::login($loginData);
  if ($user) {
    Session::put('logged_in_user',$user);
    return View::make('forms.welcome')->with('title', 'Welcome');
  }else{
    echo "Invalid access!";
  }
}

public function actionLogOut() {
  if(Session::has('logged_in_user'){
    $user = Session::get('logged_in_user');
    Auth::logout($user);
    Session::forget('logged_in_user');
  } else {
    echo "is null\n";
  }
}

查看http://four.laravel.com/docs/session 以获取有关 Laravel 会话的更多信息。

【讨论】:

  • 除了使用会话别无他法?
猜你喜欢
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 2012-07-15
  • 2012-02-22
相关资源
最近更新 更多