包 | 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 |
公共方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__construct() | 构造方法。 | CAction |
__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 |
getController() | 返回拥有这个动作的控制器。 | CAction |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
getId() | 返回动作的ID。 | CAction |
getRequestedView() | 返回用户请求的视图的名称。 | CViewAction |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
onAfterRender() | 动作调用渲染方法后发起。 | CViewAction |
onBeforeRender() | 动作调用渲染方法前发起。 | CViewAction |
raiseEvent() | 发起一个事件。 | CComponent |
run() | 执行动作。 | CViewAction |
runWithParams() | 运行带有请求参数的对象。 | CAction |
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
resolveView() | 解析用户自定义视图为一个有效的视图名称。 | CViewAction |
runWithParamsInternal() | 执行一个带有命名参数的对象的方法。 | CAction |
事件
事件 | 描述 | 定义在 |
---|---|---|
onBeforeRender | 动作调用渲染方法前发起。 | CViewAction |
onAfterRender | 动作调用渲染方法后发起。 | CViewAction |
属性详细
basePath
属性
public string $basePath;
视图的基础路径。默认是‘pages’。
基本路径将给任何用户指定的页面视图加前缀。
例如,如果用户请求tutorial.chap1
,返回的视图名称将是
pages/tutorial/chap1
,假设基础路径是pages
。
实际的视图文件名通过CController::getViewFile确定。
参见
- CController::getViewFile
defaultView
属性
public string $defaultView;
当用户没有提供viewParam的GET参数时的默认视图名称。默认为‘index’。 它的格式应该是‘path.to.view’,类似于在GET参数 中给定。
参见
- basePath
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;
}
执行动作。 这个方法显示用户请求的视图。