我在控制器配置layout使用下面的方式解决问题
$this->layout = 'main'
修改为
$this->layout = 'application.views.layouts.main';
解决了此问题
配置了三个module(module1,module2,module3)后,这个三个module下分别有三个layout.
同时在protected目录下,有一个layout文件夹,
我的想法是,举个例子来说,
当程序运行到module1后,要渲染layout时,先到module1.views.layout下寻找指定layout,
如果没有找到,就继续到protected.views.layouts下去寻找layout.
这样子,module1和module2和module3公用的layout就可以放到protected.views.layouts路径下,只需要维护一个layout,不用维护多个layout!
不知道框架是否存在这个问题,还是这问题已经解决了,更新的版本低了(注:前天才更新的svn)
现在的做法是这样的:
1. 如果CWebModule.layout没设置,那么该module下的所有view都将采用application的layout。
2. 如果CWebModule.layout,或CController.layout设置了,那么layout将在module1.views.layout下搜索。
这和你想要的有所差别。你可以通过改写CController::getLayoutFile()来实现你想要的方式。