Yii检索并存储变量renderPartial文件

时间:2011-10-02 16:20:39

标签: yii

我在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>'
...

因为文件很长而且我不想重复代码!!!

4 个答案:

答案 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文件。在任何地方使用