在布局文件中创建变量并在所有视图文件中使用它

时间:2016-01-15 18:02:34

标签: php yii2

我在views/layouts/main.php文件中创建了一个新变量,即

$user = User::findOne(Yii::$app->user->id);

当我在views/site/index.php文件中访问此变量时,Yii2通过undefined variable $user错误,

如何解决此问题?

4 个答案:

答案 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你只是访问它,你知道如何