使用自定义项目将小部件放置在自定义小部件中查看 yii2


Placing a widget inside a custom widget with custom itemView yii2

我想创建一个名为"IssueList"的自定义小部件,它将扩展"ListView"。

<?php
namespace frontend'components;
use yii'base'Widget;
use yii'widgets'ListView;
class IssueList extends Widget{
public $dataProvider;

public function init(){
    parent::init();
}
public function run(){
    return ListView::widget([
        'dataProvider' => $this->dataProvider,
        'itemOptions' => [
            'class' => 'item issue-item'
        ],
        'options' => [
            'class' => 'issue_list'
        ],
        'itemView' => '_issueListView',
        'layout' => '{items}{pager}',
    ]);
}
}?>

但是,列表视图具有自定义项视图。渲染小部件时出现此错误

视图文件不存在:

/

var/www/clients/client1/web1/frontend/views/comments/_issueListView.php

它显然在错误的目录中查找,我该如何更改它?

itemView被传递给yii''base''View render(),它负责渲染视图。因此,您可以根据需要更改视图路径,如果需要,可以使用别名:

呈现视图。

可以在以下选项之一中指定要呈现的视图 格式:

  • 路径别名(例如"@app/视图/站点/索引");
  • 应用程序中的绝对路径(例如"//site/index"):视图名称以双斜杠开头。将查看实际的视图文件 在应用程序的视图路径下。
  • 当前模块中的绝对路径(例如"/site/index"):视图名称以单个斜杠开头。将查看实际的视图文件 在当前模块的视图路径下。
  • 相对视图(例如"索引"):视图名称不以 @ 或/开头。将在视图路径下查找相应的视图文件 的视图$context。如果没有给出$context,将寻找 在包含当前正在呈现的视图的目录下 (即,在另一个视图中渲染一个视图时会发生这种情况)。

如果您希望它更加动态,可以使用以下签名将闭包传递给itemView

function ($model, $key, $index, $widget) {
    ...
}

请参阅此处itemView文档。

除了 API 文档之外,渲染视图和指定路径在视图(渲染视图)部分的官方文档中进行了描述。