Yii2 renderPartial view in Layout

Yii2 renderPartial view in Layout

我正在尝试在 yii2 上为我的布局渲染一个视图,但出现错误

PHP Notice – yii\base\ErrorException
Undefined variable: dataProvider

我创建了一个具有函数

的控制器类别
public function Wdgcategory()
    {
        $dataProvider = new ActiveDataProvider([
            'query' => Category::find(),
        ]);

        return $this->renderPartial('wdgCategory', [
            'dataProvider' => $dataProvider,
        ]);
    }

在我看来,我在 category/wdgCategory.php

中创建了一个视图文件
    <?php
use yii\helpers\Html;
use yii\widgets\ListView;

?>

<?= ListView::widget([
    'dataProvider' => $dataProvider,
    'itemOptions' => ['class' => 'item'],
    'itemView' => function ($model, $key, $index, $widget) {
        return '<li>'
                .Html::a(Html::encode($model->category_name),
                ['view', 'id' => $model->category_id])
                .'<li>';
    },
]) ?>

并在布局中添加此代码

<ul>
    <?= $this->render('/category/wdgCategory') ?>
</ul>

但我得到错误:未定义的变量:dataProvider

您已经定义了 Wdgcategory() 方法,但您从未使用过它。您只是试图从布局渲染视图而不提供必要的数据 ($dataProvider)。

在您的情况下,您可能应该为此列表创建小部件:

class CategoriesWidget extends \yii\base\Widget {

    public function run() {
        $dataProvider = new ActiveDataProvider([
            'query' => Category::find(),
        ]);

        return $this->render('categories', [
            'dataProvider' => $dataProvider,
        ]);
    }
}

并在您的布局中使用它:

<?= CategoriesWidget::widget() ?>