mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-26 06:15:19 +08:00
ViewRenderer WIP
This commit is contained in:
@ -152,6 +152,59 @@ class View extends Component
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a view file.
|
||||
*
|
||||
* @param string $viewFile view file path
|
||||
* @param array $data data to be extracted and made available to the view
|
||||
* @param boolean $return whether the rendering result should be returned instead of being echoed
|
||||
* @return string the rendering result. Null if the rendering result is not required.
|
||||
* @throws CException if the view file does not exist
|
||||
*/
|
||||
public function renderFile($viewFile, $data = null, $return = false)
|
||||
{
|
||||
$widgetCount = count($this->_widgetStack);
|
||||
if (($renderer = Yii::$application->getViewYii::app()->getViewRenderer()) !== null && $renderer->fileExtension === '.' . CFileHelper::getExtension($viewFile)) {
|
||||
$content = $renderer->renderFile($this, $viewFile, $data, $return);
|
||||
} else {
|
||||
$content = $this->renderInternal($viewFile, $data, $return);
|
||||
}
|
||||
if (count($this->_widgetStack) === $widgetCount) {
|
||||
return $content;
|
||||
} else {
|
||||
$widget = end($this->_widgetStack);
|
||||
throw new CException(Yii::t('yii', '{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.',
|
||||
array('{controller}' => get_class($this), '{view}' => $viewFile, '{widget}' => get_class($widget))));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a view file.
|
||||
* This method includes the view file as a PHP script
|
||||
* and captures the display result if required.
|
||||
* @param string $_viewFile_ view file
|
||||
* @param array $_data_ data to be extracted and made available to the view file
|
||||
* @param boolean $_return_ whether the rendering result should be returned as a string
|
||||
* @return string the rendering result. Null if the rendering result is not required.
|
||||
*/
|
||||
public function renderInternal($_viewFile_, $_data_ = null, $_return_ = false)
|
||||
{
|
||||
// we use special variable names here to avoid conflict when extracting data
|
||||
if (is_array($_data_)) {
|
||||
extract($_data_, EXTR_PREFIX_SAME, 'data');
|
||||
} else {
|
||||
$data = $_data_;
|
||||
}
|
||||
if ($_return_) {
|
||||
ob_start();
|
||||
ob_implicit_flush(false);
|
||||
require($_viewFile_);
|
||||
return ob_get_clean();
|
||||
} else {
|
||||
require($_viewFile_);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a widget.
|
||||
* This method will use [[Yii::createObject()]] to create the widget.
|
||||
|
Reference in New Issue
Block a user