包 | system.web.actions |
---|---|
继承 | class CViewAction » CAction » CComponent |
实现 | IAction |
源自 | 1.0 |
版本 | $Id: CViewAction.php 3426 2011-10-25 00:01:09Z alexander.makarow $ |
源码 |
CViewAction表示一个动作按照用户指定的参数显示一个视图。
默认情况下,要显示的视图通过
用户使用格式
注意,用户指定的视图仅能包含单词符号,点和破折号。 而且第一个字母必须是单词字母。
默认情况下,要显示的视图通过
view
的GET指定。
GET参数的名称能通过viewParam自定义。
如果用户没有提供GET参数,将通过defaultView
的指定来显示默认视图。
用户使用格式
path.to.view
指定一个视图,它被翻译成视图名称
BasePath/path/to/view
,这里BasePath
通过basePath指定。
注意,用户指定的视图仅能包含单词符号,点和破折号。 而且第一个字母必须是单词字母。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
basePath | string | 视图的基础路径。默认是‘pages’。
基本路径将给任何用户指定的页面视图加前缀。
例如,如果用户请求tutorial.
|
CViewAction |
controller | CController | 拥有这个动作的控制器。 | CAction |
defaultView | string | 当用户没有提供viewParam的GET参数时的默认视图名称。默认为‘index’。 它的格式应该是‘path. | CViewAction |
id | string | 动作的ID。 | CAction |
layout | mixed | 被应用到这个视图的布局的名称。 这将在视图被渲染前,被指派到CController::layout。 默认为null,意味着控制器的layout将被使用。 如果为false,没有layout被应用。 | CViewAction |
renderAsText | boolean | 是否将内容当作PHP脚本或者静态文本来渲染。默认为false。 | CViewAction |
requestedView | string | 返回用户请求的视图的名称。 | CViewAction |
view | string | 要渲染的视图名称。一旦用户请求的视图被解析, 这个属性将被设置。 | CViewAction |
viewParam | string | 包含请求视图名称的GET参数的名称。默认为‘view’。 | CViewAction |
公共方法
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
resolveView() | 解析用户自定义视图为一个有效的视图名称。 | CViewAction |
runWithParamsInternal() | 执行一个带有命名参数的对象的方法。 | CAction |
事件
事件 | 描述 | 定义在 |
---|---|---|
onBeforeRender | 动作调用渲染方法前发起。 | CViewAction |
onAfterRender | 动作调用渲染方法后发起。 | CViewAction |
属性详细
basePath
属性
public string $basePath;
视图的基础路径。默认是‘pages’。
基本路径将给任何用户指定的页面视图加前缀。
例如,如果用户请求tutorial.chap1
,返回的视图名称将是
pages/tutorial/chap1
,假设基础路径是pages
。
实际的视图文件名通过CController::getViewFile确定。
defaultView
属性
public string $defaultView;
当用户没有提供viewParam的GET参数时的默认视图名称。默认为‘index’。 它的格式应该是‘path.to.view’,类似于在GET参数 中给定。
参见
layout
属性
public mixed $layout;
被应用到这个视图的布局的名称。 这将在视图被渲染前,被指派到CController::layout。 默认为null,意味着控制器的layout将被使用。 如果为false,没有layout被应用。
renderAsText
属性
public boolean $renderAsText;
是否将内容当作PHP脚本或者静态文本来渲染。默认为false。
requestedView
属性
只读
public string getRequestedView()
返回用户请求的视图的名称。 如果用户没有指定任何视图,则返回defaultView。
view
属性
public string $view;
要渲染的视图名称。一旦用户请求的视图被解析, 这个属性将被设置。
viewParam
属性
public string $viewParam;
包含请求视图名称的GET参数的名称。默认为‘view’。
方法详细
getRequestedView()
方法
public string getRequestedView()
| ||
{return} | string | 用户请求的视图的名称。 使用的格式为‘path.to.view’。 |
public function getRequestedView()
{
if($this->_viewPath===null)
{
if(!empty($_GET[$this->viewParam]))
$this->_viewPath=$_GET[$this->viewParam];
else
$this->_viewPath=$this->defaultView;
}
return $this->_viewPath;
}
返回用户请求的视图的名称。 如果用户没有指定任何视图,则返回defaultView。
onAfterRender()
方法
public void onAfterRender(CEvent $event)
| ||
$event | CEvent | 事件参数 |
public function onAfterRender($event)
{
$this->raiseEvent('onAfterRender',$event);
}
动作调用渲染方法后发起。
onBeforeRender()
方法
public void onBeforeRender(CEvent $event)
| ||
$event | CEvent | 事件参数 |
public function onBeforeRender($event)
{
$this->raiseEvent('onBeforeRender',$event);
}
动作调用渲染方法前发起。 事件处理程序能设置CEvent::handled属性为true, 停止进一步的视图渲染。
resolveView()
方法
protected string resolveView(string $viewPath)
| ||
$viewPath | string | 格式‘path.to.view’的用户自定义视图路径。 |
{return} | string | 格式‘path/to/view’的被解析的完整视图路径。 |
protected function resolveView($viewPath)
{
// start with a word char and have word chars, dots and dashes only
if(preg_match('/^\w[\w\.\-]*$/',$viewPath))
{
$view=strtr($viewPath,'.','/');
if(!empty($this->basePath))
$view=$this->basePath.'/'.$view;
if($this->getController()->getViewFile($view)!==false)
{
$this->view=$view;
return;
}
}
throw new CHttpException(404,Yii::t('yii','The requested view "{name}" was not found.',
array('{name}'=>$viewPath)));
}
解析用户自定义视图为一个有效的视图名称。
run()
方法
public void run()
|
public function run()
{
$this->resolveView($this->getRequestedView());
$controller=$this->getController();
if($this->layout!==null)
{
$layout=$controller->layout;
$controller->layout=$this->layout;
}
$this->onBeforeRender($event=new CEvent($this));
if(!$event->handled)
{
if($this->renderAsText)
{
$text=file_get_contents($controller->getViewFile($this->view));
$controller->renderText($text);
}
else
$controller->render($this->view);
$this->onAfterRender(new CEvent($this));
}
if($this->layout!==null)
$controller->layout=$layout;
}
执行动作。 这个方法显示用户请求的视图。