如何使用\Yii::$app->user->name
添加或获取变量?
我不想让他们通过{{1}}。我希望通过{{1}}访问特定的内容。
例如,我想获取当前登录用户的用户名和名称:
{{1}}
或
{{1}}
答案 0 :(得分:10)
虽然SO上的其他主题提供了一个chincy hack解决方案,或者只是通过Yii::$app->user->identity
获取它,我将向您展示如何正确地完成它。您可以通过虚拟扩展所有内容来弯曲Yii2!
我通常在"高级"应用程序,但我将使用"基本"应用程序作为每个人的参考。我假设那些正在使用"高级"应用程序知道差异并了解名称空间。
命名空间速成课程:基本上,您有namespace app\path\to
。这是文件所在的位置。例如,您有位于app根models
目录中的ContactForm.php,因此它的名称空间为app\models
。在高级版中,您有多个应用(前端和后端),因此应用根不同,因此您将frontend
作为一个应用根,将backend
作为另一个。{1}}。高级应用程序中的models目录位于" frontend / models"它的名称空间是frontend\models
。 - 所以你看到的任何地方" app"在命名空间中,您可以将frontend
或backend
替换为" advanced"模板。
首先,我们需要修改应用程序的配置文件以覆盖默认的用户组件类。我会遗漏任何不相关的内容,所以你保持identityClass
的定义,我只是没有表现出来。我们只是添加,而不是替换配置。此外,在我显示frontend/something
的位置,backend/something
也可以这样做。我不会一遍又一遍地重复......
基本(config/web.php
) - 或 - 高级(frontend/config/main.php
)
'components' => [
'user' => [
'class' => 'app\components\User', // extend User component
],
],
请记住:如果您使用的是高级模板,请将app
替换为frontend
或backend
!
我还想指出,你需要创建"组件"目录,如果你还没有这样做。这是许多人添加自定义类的地方。无论是您自己的帮助类,还是扩展基础Yii组件(例如扩展yii\web\Controller
)。
在名为components
的{{1}}目录中创建一个新文件。在该文件中,放置以下代码:
User.php
注意:<?php
namespace app\components;
use Yii;
/**
* Extended yii\web\User
*
* This allows us to do "Yii::$app->user->something" by adding getters
* like "public function getSomething()"
*
* So we can use variables and functions directly in `Yii::$app->user`
*/
class User extends \yii\web\User
{
public function getUsername()
{
return \Yii::$app->user->identity->username;
}
public function getName()
{
return \Yii::$app->user->identity->name;
}
}
和username
必须是数据库用户表中的有效列名!
所以现在我们可以在我们的控制器中使用它,在任何地方查看..让我们测试一下。在name
中,将其添加到页面底部:
views/site/index.php
如果一切正常,并且您在用户表中有名称和用户名的值,则应将其打印到页面上:)