CakePHP3将用户置于default.ctp中

时间:2016-04-19 10:06:58

标签: php cakephp cakephp-3.0

您好我在CakePHP 3项目上工作..

我想从 default.ctp 显示已登录用户的用户名,所以我尝试了这个:

//in default.ctp   
 $user = $this->Session->read('Auth.User');
    if(!empty($user)) {
        echo 'Hi ', $user['user_name'];
    }

它没有用,我发现其他解决办法告诉当前用户从 AppController 进行会话它也不起作用这就是:

// in AppController      
function beforeFilter(){
  $user = $this->Session->read('Auth.User');
  $this->set('username', $user['username']);
}

并在 default.ctp

<?=$username?>

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:7)

访问会话是错误的方法。 CakePHP中的auth系统可以处理不同的用户来源,例如,赢得会话无状态auth系统。

所以正确的方法是让用户从抽象的auth系统中获取,直接从会话中读取它。在会话密钥更改的情况下,会话方法也会搞砸。

在AppController中添加:

public function beforeRender() {
    $this->set('user', $this->Auth->user());
}

然后访问视图中的$ user var。 My plugin甚至包含a helper来处理视图中用户数据的常见任务。

答案 1 :(得分:4)

<?php   $session = $this->request->session(); // less than 3.5
        // $session = $this->request->getSession(); // 3.5 or more
        $user_data = $session->read('Auth.User');
        if(!empty($user_data)){
            print_r($user_data);
  }?>

试着希望它有所帮助......

答案 2 :(得分:1)

您可能需要包括 - {app}中的use Cake\View\Helper\SessionHelper ; //

你有正确的代码片段 -

// in AppController  , this function being called before every request  
function beforeFilter(){
  $user = $this->request->session()->read('Auth.User');
  $this->set('username', $user['username']);
}

显然这些设置值将在您的视图布局文件中提供。

<?=$username?> or <?php echo $username ;?> // both are same.

你没有来这里?