> YII 类库手册 > CViewAction
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;
}

执行动作。 这个方法显示用户请求的视图。

上一篇: