我在protected / views / directory_controller_name下有一个php文件,其格式类似于
<p>
<?php echo $model->title;?>
</p>
...
我在控制器中使用经典方法显示文件:
$this->render('filename',array('model'=>$model));
但是知道,我需要发送一封包含相同模板/布局的电子邮件,所以我想将文件的渲染存储在一个变量中,如
$ msgHTML = $ this-&gt; renderInternal('_ items',array('model'=&gt; $ model));
But it doesn't work!
如何从文件中获取渲染视图并存储在变量中? 有可能吗?
我不想使用:
$msgHTML = '<p>'.$model->title.'</p>'
...
因为文件很长而且我不想重复代码!!!
答案 0 :(得分:18)
请勿使用renderInternal方法,而是使用renderPartial。渲染内部是低级方法,不应在此类上下文中使用。要捕获输出,只需将$ return参数设置为true:
<?php $output = $this->renderPartial('_subView', $dataArray, true); ?>
答案 1 :(得分:7)
$msgHTML = $this->renderInternal('_items', array('model'=>$model), true);
http://www.yiiframework.com/doc/api/1.1/CBaseController#renderInternal-detail
答案 2 :(得分:2)
我可能会遗漏一些东西,但你不能只使用常规的render()并将return参数设置为true吗?然后你可以使用视图'name'而不是知道路径。 (除非我的可靠堆栈跟踪记录器被破坏,否则renderFile和renderInternal采用相同的完全限定路径参数。至少我可以看到renderPartial()将我的视图文件的完整路径传递给renderFile。)
答案 3 :(得分:0)
你可以用这些方式做到这一点
1)如果你想得到带有页眉和页脚(即)完整版面的输出,那么就这样做
//add true in the last parameter if you want a return of the output
$htmloutput=$this->render('_pdfoutput',array('data'=>'nothing'),true);
2)同样,如果您不想获取布局文件,只需以相同的方式使用renderpartial
$htmloutput=$this->renderpartial('_pdfoutput',array('data'=>'nothing'),true);
您将获得变量中的html文件。在任何地方使用