2014-09-01 41 views
0

在Yii中,当你使用呈现一个小部件或控制器,你只需要给出文件名(不含.PHP)作为参数,如:Yii:如何更改渲染函数的默认路径?

$this->render('forum', array('data'=>$data)); 

例如,当使用我在课堂上这个功能扩展CWidget,Yii会试图找到forum.php里面/保护/组件/视图

我怎么能改变这个默认路径到其他地方?为我所有的小部件类(所有类扩展CWidget)?以及如果我只想改变我的一些小部件的路径呢?

回答

1

你需要重写CWidget类的getViewPath方法

如: -

class CMyWidget extends CWidget{ 

// Returns the directory containing the view files for this widget. 

public function getViewPath($checkTheme=false){ 

// this method does the task of finding the view files containing directory. 
// so override it 

} 

// This method will look for the view under the widget's getViewPath viewPath. 
public function getViewFile($viewName) 
    { 
// override it 
} 

    } 

最后创建部件时,你将不得不延长CMyWidget类,而不是CWidget

+0

我可以把getViewPath()方法中,我创建的部件? 或者我应该做一个setViewPath()方法来改变设置? – 2014-09-02 02:17:33

+0

是的,您可以重写您创建的小部件中的getViewPath(),但是如果您必须创建很多小部件,则必须在每个小部件中重写相同的部件。这将是有问题的,我认为 – 2014-09-02 04:27:12

0

你可以简单地做一个$this->render('//path/forum', array('data'=>$data));,其中//指向主视图目录,通常为protected/views

您也可以使用别名路径以点符号:

$this->render('application.myviews.test'); // would render protected/myviews/test.php 
$this->render('webroot.test'); // would render htdocs/test.php 
+0

我的视图文件如何保护/视图外? – 2014-09-02 06:39:12

+0

您可以使用点符号。我更新了我的答案。 – 2014-09-02 09:44:39