Yii Получить и сохранить в переменной файл renderPartial - PullRequest
7 голосов
/ 02 октября 2011

У меня есть php-файл в защищенном / views / directory_controller_name с таким форматированием

<p>
<?php echo $model->title;?>
</p>
...

Я отображаю файл с классическим методом в контроллере:

$this->render('filename',array('model'=>$model));

Но знаете,Мне нужно отправить электронное письмо с тем же шаблоном / макетом, поэтому я хочу сохранить визуализацию файла в такой переменной, как

$ msgHTML = $ this-> renderInternal ('_ items', array ('model')=> $ model));

But it doesn't work!

Как получить представление рендеринга из файла и сохранить в переменной?Возможно ли это?

Я не хочу использовать:

$msgHTML = '<p>'.$model->title.'</p>'
...

Поскольку файл очень длинный и я не хочу дублировать код !!!

Ответы [ 4 ]

18 голосов
/ 24 января 2013

Не используйте метод renderInternal, вместо этого используйте renderPartial . Render internal - низкоуровневый метод, и его не следует использовать в таком контексте. Чтобы перехватить вывод, просто установите для параметра $ return значение true:

<?php $output = $this->renderPartial('_subView', $dataArray, true); ?>
7 голосов
/ 02 октября 2011
$msgHTML = $this->renderInternal('_items', array('model'=>$model), true);

http://www.yiiframework.com/doc/api/1.1/CBaseController#renderInternal-detail

2 голосов
/ 21 октября 2011

Возможно, я что-то упустил, но вы не можете просто использовать обычную render () с аргументом возврата, установленным в true? Тогда вы можете просто использовать представление «имя» вместо того, чтобы знать путь. (И если мой надежный регистратор трассировки стека не будет поврежден, renderFile и renderInternal принимают один и тот же аргумент полного пути. По крайней мере, я вижу, как renderPartial () передает полный путь к моему файлу представления в renderFile.)

0 голосов
/ 06 мая 2015

вы можете сделать это следующими способами

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 файлов в переменной. используйте это где угодно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...