Php Yii2-如何从Yii获取当前用户名或名称::$app->;用户?
如何使用Php Yii2-如何从Yii获取当前用户名或名称::$app->;用户?,php,yii,yii2,yii2-user,Php,Yii,Yii2,Yii2 User,如何使用Yii::$app->user->something添加或获取变量 我不想让他们通过identity。我想通过用户访问特定的代码 例如,我想获取当前登录用户的用户名和名称: \Yii::$app->user->username 或 虽然这里的其他主题提供了一个chincy黑客解决方案,或者只是通过Yii::$app->user->identity获取它,但我将向您展示如何正确地完成它。通过几乎扩展所有内容,您可以让Yii2服从您的意愿 我通常在“高级”应用程序中工作,但我将
Yii::$app->user->something
添加或获取变量
我不想让他们通过identity
。我想通过用户
访问特定的代码
例如,我想获取当前登录用户的用户名和名称:
\Yii::$app->user->username
或
虽然这里的其他主题提供了一个chincy黑客解决方案,或者只是通过
Yii::$app->user->identity
获取它,但我将向您展示如何正确地完成它。通过几乎扩展所有内容,您可以让Yii2服从您的意愿
我通常在“高级”应用程序中工作,但我将只使用“基本”应用程序作为每个人的参考。我假设那些使用“高级”应用程序的人知道它们之间的区别并理解名称空间
名称空间速成班:在basic中,您有名称空间应用程序\path\to
。这是文件所在的位置。例如,ContactForm.php位于app rootmodels
目录中,因此它的名称空间是app\models
。在advanced中,您有多个应用程序(前端和后端),因此应用程序根目录不同,因此您将前端
作为一个应用程序根目录,将后端
作为另一个应用程序根目录。高级应用程序中的模型目录位于“frontend/models”,其名称空间为frontend\models
因此,在名称空间中看到“app”的任何地方,都可以将其替换为“高级”模板的frontend
或backend
解决方案 首先,我们需要修改应用程序的配置文件以覆盖默认用户组件的类。我将省略任何不相关的内容,因此您保留您的
identityClass
定义,我只是不显示它。我们只是添加而不是替换配置。另外,在我显示的frontend/something
中,也可以对后端/something
执行同样的操作。我只是不打算一遍又一遍地重复
基本(config/web.php
)或高级(frontend/config/main.php
)
请记住:如果您使用的是高级模板,请将应用程序
替换为前端
或后端
我还想指出,如果还没有创建“components”目录,则需要创建该目录。这是许多人添加自定义类的地方。无论是您自己的助手类,还是扩展基本的Yii组件(例如扩展Yii\web\Controller
)
在组件
目录中创建一个名为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;
}
}
如果一切正常,并且用户表中有name和username的值,则应将它们打印到页面上:)您的问题的答案是@user3600691-请再次查看。我还回答了它下面的问题,链接到这个页面!每个人的答案使用
标识
。如果你看我在这一页上的答案,我已经知道了怎么做。我正在演示如何扩展User
组件,以添加您想要添加的任何内容Yii::$app->User->whatever
。为什么直接从Yii::$app->User->identity>获取数据不是正确的方法?缺点是什么?
'components' => [
'user' => [
'class' => 'app\components\User', // extend User component
],
],
<?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;
}
}
<?= \Yii::$app->user->name ?>
<?= \Yii::$app->user->username ?>