使用自定义itemView yii2将窗口小部件放置在自定义窗口小部件中

时间:2016-01-14 09:05:49

标签: php 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}',
    ]);

}

}?>

然而,ListView有一个自定义itemView。渲染小部件时,我收到此错误

视图文件不存在:

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

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

1 个答案:

答案 0 :(得分:1)

itemView传递给负责呈现视图的yii\base\View render()。因此,您可以根据需要使用别名更改视图路径:

  

渲染视图。

     

可以在以下之一中指定要渲染的视图   格式:

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

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

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

查看itemView here的文档。

除了API文档之外,Views (Rendering Views)部分的官方文档中描述了呈现视图和指定路径。