包 | system.web.renderers |
---|---|
继承 | abstract class CViewRenderer » CApplicationComponent » CComponent |
实现 | IApplicationComponent, IViewRenderer |
子类 | CPradoViewRenderer |
源自 | 1.0 |
版本 | $Id: CViewRenderer.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 |
CViewRenderer 是视图渲染类的基类。
一个视图是一个应用程序组件, 它渲染用自定义语法写的视图。
一旦安装一个名为viewRenderer的视图渲染组件, 正常的视图渲染过程将会被打断。 渲染器将首先解析源视图文件 然后渲染视图文件。
解析结果被保存为临时文件 它可能存储在runtime目录或和源视图文件相同的目录。
一个视图是一个应用程序组件, 它渲染用自定义语法写的视图。
一旦安装一个名为viewRenderer的视图渲染组件, 正常的视图渲染过程将会被打断。 渲染器将首先解析源视图文件 然后渲染视图文件。
解析结果被保存为临时文件 它可能存储在runtime目录或和源视图文件相同的目录。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
behaviors | array | 这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。 | CApplicationComponent |
fileExtension | string | 视图文件的扩展名. | CViewRenderer |
filePermission | integer | 解析后生成的临时目录和临时文件的权限。 默认为0755 (owner rwx, group rx and others rx). | CViewRenderer |
isInitialized | boolean | 检查应用组件是否已经初始化。 | CApplicationComponent |
useRuntimePath | boolean | 是否将解析的结果保存在应用程序的runtime目录。 默认为true。 如果设置为false,解析结果将以文件形式保存在和源视图文件相同的目录下 文件名将会是源视图文件名加上字母c。 | CViewRenderer |
公共方法
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
generateViewFile() | 解析源视图文件,保存结果到另一个文件。 | CViewRenderer |
getViewFile() | 生成结果视图文件的路径。 | CViewRenderer |
属性详细
fileExtension
属性
public string $fileExtension;
视图文件的扩展名. 默认为'.php'.
filePermission
属性
public integer $filePermission;
解析后生成的临时目录和临时文件的权限。 默认为0755 (owner rwx, group rx and others rx).
useRuntimePath
属性
public boolean $useRuntimePath;
是否将解析的结果保存在应用程序的runtime目录。 默认为true。 如果设置为false,解析结果将以文件形式保存在和源视图文件相同的目录下 文件名将会是源视图文件名加上字母c。
方法详细
generateViewFile()
方法
abstract protected void generateViewFile(string $sourceFile, string $viewFile)
| ||
$sourceFile | string | 源视图文件路径 |
$viewFile | string | 作为结果的视图文件路径 |
abstract protected function generateViewFile($sourceFile,$viewFile);
解析源视图文件,保存结果到另一个文件。
getViewFile()
方法
protected string getViewFile(string $file)
| ||
$file | string | 源视图文件路径 |
{return} | string | 结果视图文件路径 |
protected function getViewFile($file)
{
if($this->useRuntimePath)
{
$crc=sprintf('%x', crc32(get_class($this).Yii::getVersion().dirname($file)));
$viewFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.$crc.DIRECTORY_SEPARATOR.basename($file);
if(!is_file($viewFile))
@mkdir(dirname($viewFile),$this->filePermission,true);
return $viewFile;
}
else
return $file.'c';
}
生成结果视图文件的路径。
renderFile()
方法
public mixed renderFile(CBaseController $context, string $sourceFile, mixed $data, boolean $return)
| ||
$context | CBaseController | 渲染视图文件controller或widget。 |
$sourceFile | string | 视图文件路径 |
$data | mixed | 要传到视图中的数据 |
$return | boolean | 是否将渲染结果返回 |
{return} | mixed | 返回渲染结果,或者当不需要渲染结果时返回null。 |
public function renderFile($context,$sourceFile,$data,$return)
{
if(!is_file($sourceFile) || ($file=realpath($sourceFile))===false)
throw new CException(Yii::t('yii','View file "{file}" does not exist.',array('{file}'=>$sourceFile)));
$viewFile=$this->getViewFile($sourceFile);
if(@filemtime($sourceFile)>@filemtime($viewFile))
{
$this->generateViewFile($sourceFile,$viewFile);
@chmod($viewFile,$this->filePermission);
}
return $context->renderInternal($viewFile,$data,$return);
}
渲染一个视图文件。 这个方法是 IViewRenderer 所必须的。