Yii2控制器向模板传递变量失败问题求助
Yii2 视图变量传递问题解答
错误原因
你一开始在视图里直接调用$listPlayer报错,核心原因是控制器只向视图传递了$rows变量,$listPlayer这个变量根本没被传入视图。而且Players::find()->all()返回的是包含多个Player模型对象的数组,不是单个对象,就算传了单个对象变量,也不能直接用数组的方式去访问单个属性。
正确写法解析
你修改后的遍历代码是正确的,因为$rows是对象数组,必须通过循环遍历才能逐个获取里面的Player对象:
<?php foreach ($rows as $listPlayer): ?> <h1><?= $listPlayer->name ?></h1> <?php endforeach; ?>
这里的$listPlayer是循环过程中生成的临时变量,每次循环都会指向数组里的一个Player模型对象,所以能正常访问name属性。
补充说明(解决你可能的疑问)
如果你的需求是展示单个玩家的数据,那控制器需要传递单个模型对象,而不是数组:
// 控制器actionIndex方法 public function actionIndex() { // 获取单个玩家,比如根据ID查询 $listPlayer = Players::findOne(1); return $this->render('index', [ 'listPlayer' => $listPlayer ]); }
这时视图就能直接用<?= $listPlayer->name ?>来访问单个玩家的属性了。
另外要注意,Players::find()->all()是Yii2 ActiveQuery的常用方法,返回的是ActiveRecord对象数组,处理这类数据的常规方式就是循环遍历,或者用ArrayHelper转换成数组后再处理,但直接遍历对象数组是最直接的用法。
内容的提问来源于stack exchange,提问作者Vyacheslav
相关产品推荐
相关产品推荐

