CakePHP3在default.ctp中获取用户


CakePHP3 get user in default.ctp

我从事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']);
}

并且在默认情况下。ctp

<?=$username?>

我怎样才能做到这一点?

访问会话是错误的方法。CakePHP中的身份验证系统可以处理不同的用户源,例如,会话不适用于无状态身份验证系统。

因此,正确的方法是从抽象的身份验证系统中获取用户,而不是直接从会话中读取。此外,在会话密钥发生更改的情况下,会话方法也会出错。

在AppController中只需添加以下内容:

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

然后访问视图中的$user-var。我的插件甚至包含一个助手来处理视图中用户数据的常见任务。

<?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);
  }?>

试试这个,希望对你有帮助。。

您可能需要包括--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.

你在这里没有得到什么?