如题,因为我的view内容需要动态生成,能否不生成view文件,直接传入view字符串呢?
如果一定要生成view文件,那我得先把这个view内容生成文件再渲染,再删除,太费劲了。
PS:这个动态view内容,跟普通view文件一样,也有<?php $this->widget()?>等Yii语句。
如题,因为我的view内容需要动态生成,能否不生成view文件,直接传入view字符串呢?
如果一定要生成view文件,那我得先把这个view内容生成文件再渲染,再删除,太费劲了。
PS:这个动态view内容,跟普通view文件一样,也有<?php $this->widget()?>等Yii语句。
那你可以在控制器里用echo输出内容就可以了!
这个动态view,跟普通view文件一样,有<?php $this->widget();?>这些Yii语句,不能直接echo啊。
eval()
我需要的是
平时render是指定一个view文件,yii自己include进来。我希望能够直接传入这个字符串,不需要include了,其他则不变。因为我仍需要yii的<?php $this->widget()?>这些语句,直接echo直接eval是不行的啦。
看了上面的回答,还是不知道你想要的是什么。。 !
不过我这样写:
$view = 'index';
$this->render($view,array(
'dataProvider'=>$dataProvider,
));
能运行啊,就是说,这个$view可以动态输入?!
像你这样的情况为何还要生成 code字符串,再试图用 render() 去调用呢?如果非要这样肯定是不行的,render系列里都是透过 include 来实现的。
你里面的那些 widgets 也可以直接在 controller 里直接运行。
再看了一次问题,还是没有想明白楼主的意图是什么~~~hightman说得很对了。
PS:咋我每次看到hightman,都会想到广州话:hi佬。。。我承认我比较邪恶
好吧,我暂时放弃了,唯有把view内容生成view文件,再把文件名写到render里去了。
回复 Davidhhuan
其实我的意图就是,例如一个view文件简单如下
<html>
<head><title><?php echo $title?></title></head>
<?php $this->widget(‘testWidget’);?>
</html>
上面的view内容(从<html>到</html>的内容)的字符串是动态生成,所以我不想自己硬要把他生成文件,render一下,再把它删除。所以希望能直接传入view的内容字符串直接渲染,假设有一个renderContent的方法就好了,呵呵~~