Php Yii:如何更改渲染函数的默认路径?

Php Yii:如何更改渲染函数的默认路径?,php,yii,Php,Yii,在Yii中,当您在小部件或控制器中使用render时,只需将文件名(不含.php)作为参数,如下所示: $this->render('forum', array('data'=>$data)); 例如,当我在扩展CWidget类中使用此函数时,Yii将尝试在/protected/components/views中查找forum.php 如何将此默认路径更改为其他位置?对于所有我的widget类(所有类都扩展了CWidget)?如果我只想更改一些小部件的路径怎么办?您需要覆盖CWid

在Yii中,当您在小部件或控制器中使用render时,只需将文件名(不含.php)作为参数,如下所示:

$this->render('forum', array('data'=>$data));
例如,当我在扩展CWidget类中使用此函数时,Yii将尝试在/protected/components/views中查找forum.php


如何将此默认路径更改为其他位置?对于所有我的widget类(所有类都扩展了CWidget)?如果我只想更改一些小部件的路径怎么办?

您需要覆盖CWidget类的getViewPath方法

例如:-


最后,在创建小部件时,您必须扩展CMyWidget类,而不是CWidget

您只需执行
$this->渲染('//path/forum',array('data'=>$data)),其中
/
指向主视图目录,通常为
受保护/视图

还可以使用带点符号的别名路径:

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

我可以将getViewPath()方法放入我创建的小部件中吗?或者我应该使用setViewPath()方法来更改设置吗?是的,您可以在创建的小部件中覆盖getViewPath(),但是如果必须创建多个小部件,则必须在每个小部件中覆盖相同的设置。这可能会有问题,我想我的视图文件是否在受保护/视图之外??
$this->render('application.myviews.test'); // would render protected/myviews/test.php
$this->render('webroot.test'); // would render htdocs/test.php