我在views/layouts/main.php
文件中创建了一个新变量,即
$user = User::findOne(Yii::$app->user->id);
当我在views/site/index.php
文件中访问此变量时,Yii2通过undefined variable $user
错误,
如何解决此问题?
答案 0 :(得分:1)
用作
global $ user;
这里是全局调用变量。
答案 1 :(得分:1)
对于您的问题,您不必设置或传递任何变量。使用Yii::$app->user->identity
,它已经包含了当前登录用户的模型。
我建议在User
模型中创建单独的方法:
/**
* Get current user
* @return User
*/
public static function getCurrent()
{
return Yii::$app->user->identity;
}
然后像这样称呼它:
<div><?= User::getCurrent()->name ?></div>
它不仅更短,更易读,而且在使用IDE时提供了完整的自动完成功能以及可用属性和方法的突出显示。
答案 2 :(得分:1)
这个问题的一般答案是为Controller使用基类并在该控制器中设置变量。
布局视图中没有设置成员!
例如:
class BaseController extends \yii\web\Controller
{
public $sharedMember;
public function init()
{
parent::init();
$this->sharedMember = 10;
}
}
对于所有其他控制器:
class ControllerA extends BaseController
{
public function actionIndex()
{
return $this->render('index');
}
}
在ControllerA的索引操作中
echo $this->context->sharedMember;
将显示10
。
答案 3 :(得分:0)
在你的类用户中,创建一个名为protected $ id;的新属性,然后创建一个setter方法,并从你的views / layouts / main.php中调用带有变量的setter。
class user{
protected $id;
}
public class set_id($id){
$this-id = $id;
}
main.php:
$user->set_id($your_variable);
现在从index.php你只是访问它,你知道如何