を使用して変数をどのように追加または取得しますYii::$app->user->something
か?
私はそれらを通過させたくありませんidentity
。を通じて特定のものにアクセスできるようにしたいuser
。
たとえば、現在ログインしているユーザーのユーザー名と名前を取得したい:
\Yii::$app->user->username
また
\Yii::$app->user->name
SO に関する他のトピックでは、簡単なハック ソリューションを提供したり、単純に を介してフェッチしたりしYii::$app->user->identity
ていますが、適切に行う方法を紹介します。事実上すべてを拡張することで、Yii2 を思い通りに曲げることができます!
私は通常「高度な」アプリで作業しますが、「基本的な」アプリはすべての人の参考として使用するだけです。「高度な」アプリを使用している人は、違いを知っていて、名前空間を理解していると思います。
名前空間クラッシュ コース:基本的に、namespace app\path\to
. これがファイルの場所です。たとえば、アプリのルートmodels
ディレクトリに ContactForm.php があるので、その名前空間はapp\models
. 高度な場合、複数のアプリ (フロントエンドとバックエンド) があるため、アプリのルートが異なり、frontend
1 つのアプリ ルートとbackend
別のアプリ ルートがあります。高度なアプリのモデル ディレクトリは "frontend/models" にあり、その名前空間はfrontend\models
. -- したがって、名前空間で「app」が表示されている場所ならどこでも、「advanced」テンプレートに置き換えることができfrontend
ますbackend
。
まず、アプリの構成ファイルを変更して、デフォルトの User コンポーネントのクラスをオーバーライドする必要があります。identityClass
関係のないものは除外しますので、定義したままにしておいてください。表示していません。config を置き換えるのではなく、単に追加しているだけです。また、私が示したところではfrontend/something
、同じことを に対して行うことができますbackend/something
。私は両方を何度も繰り返すつもりはありません...
基本 ( config/web.php
) - または - 高度 ( frontend/config/main.php
)
'components' => [
'user' => [
'class' => 'app\components\User', // extend User component
],
],
注意: 高度なテンプレートを使用している場合は、または!に置き換えapp
てください。frontend
backend
また、「components」ディレクトリを作成していない場合は作成する必要があることも指摘しておきます。これは、多くの人がカスタム クラスを追加する場所です。それが独自のヘルパー クラスであろうと、ベース Yii コンポーネントの拡張であろうと (拡張などyii\web\Controller
)。
components
という名前のディレクトリに新しいファイルを作成します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
andname
は、データベースのユーザー テーブルで有効な列名でなければなりません!
これで、コントローラー、ビュー、どこでもこれを使用できるようになりました。テストしてみましょう。で、これviews/site/index.php
をページの下部に追加します。
<?= \Yii::$app->user->name ?>
<?= \Yii::$app->user->username ?>
すべて問題がなく、ユーザー テーブルに名前とユーザー名の値がある場合、それらはページに出力されるはずです:)