包 | 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 |
公共方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__unset() | 设置一个组件的属性为null。 | CComponent |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaLuateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
getIsInitialized() | 检查应用组件是否已经初始化。 | CApplicationComponent |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
init() | 初始化应用组件。 | CApplicationComponent |
raiseEvent() | 发起一个事件。 | CComponent |
renderFile() | 渲染一个视图文件。 | 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 所必须的。