renderPartial和render with layout false之间有什么区别?我知道renderPartial不会包含layout。$this->renderPartial()与$this->layout=false; $this->render();的比较
false
renderPartial
$this->renderPartial()
$this->layout=false; $this->render();
g6baxovj1#
不多。render()在内部使用renderPartial(),如果设置了,则将其 Package 在$layout中。看来源:
render()
renderPartial()
$layout
public function render($view,$data=null,$return=false) { if($this->beforeRender($view)) { $output=$this->renderPartial($view,$data,true); if(($layoutFile=$this->getLayoutFile($this->layout))!==false) $output=$this->renderFile($layoutFile,array('content'=>$output),true); $this->afterRender($view,$output); $output=$this->processOutput($output); if($return) return $output; else echo $output; } }
和
public function renderPartial($view,$data=null,$return=false,$processOutput=false) { if(($viewFile=$this->getViewFile($view))!==false) { $output=$this->renderFile($viewFile,$data,true); if($processOutput) $output=$this->processOutput($output); if($return) return $output; else echo $output; } else throw new CException(Yii::t('yii','{controller} cannot find the requested view "{view}".', array('{controller}'=>get_class($this), '{view}'=>$view))); }
我能看到的三个区别是:
$layout = false
processOutput()
beforeRender()
afterRender()
1条答案
按热度按时间g6baxovj1#
不多。
render()
在内部使用renderPartial()
,如果设置了,则将其 Package 在$layout
中。看来源:
和
我能看到的三个区别是:
render()
与$layout = false
将运行processOutput()
;renderPartial()
不会这样做,除非您明确地将它设定为这样做。render()
调用beforeRender()
和afterRender()
;renderPartial()
则不会。1.在具有多个局部视图的场景中,
renderPartial()
将永远不会呈现任何$layout
;如果在任何局部视图中设置了$layout
,则render()
将显示。