php ccontroller,CController

CController

CController manages a set of actions which deal with the corresponding user requests.

Through the actions, CController coordinates the data flow between models and views.

When a user requests an action 'XYZ', CController will do one of the following:

1. Method-based action: call method 'actionXYZ' if it exists;

2. Class-based action: create an instance of class 'XYZ' if the class is found in the action class map

(specified via actions(), and execute the action;

3. Call missingAction(), which by default will raise a 404 HTTP exception.

If the user does not specify an action, CController will run the action specified by

defaultAction, instead.

CController may be configured to execute filters before and after running actions.

Filters preprocess/postprocess the user request/response and may quit executing actions

if needed. They are executed in the order they are specified. If during the execution,

any of the filters returns true, the rest filters and the action will no longer get executed.

Filters can be individual objects, or methods defined in the controller class.

They are specified by overriding filters() method. The following is an example

of the filter specification:

array(

'accessControl - login',

'ajaxOnly + search',

array(

'COutputCache + list',

'duration'=>300,

),

)

The above example declares three filters: accessControl, ajaxOnly, COutputCache. The first two

are method-based filters (defined in CController), which refer to filtering methods in the controller class;

while the last refers to an object-based filter whose class is 'system.web.widgets.COutputCache' and

the 'duration' property is initialized as 300 (s).

For method-based filters, a method named 'filterXYZ($filterChain)' in the controller class

will be executed, where 'XYZ' stands for the filter name as specified in filters().

Note, inside the filter method, you must call $filterChain->run() if the action should

be executed. Otherwise, the filtering process would stop at this filter.

Filters can be specified so that they are executed only when running certain actions.

For method-based filters, this is done by using '+' and '-' operators in the filter specification.

The '+' operator means the filter runs only when the specified actions are requested;

while the '-' operator means the filter runs only when the requested action is not among those actions.

For object-based filters, the '+' and '-' operators are following the class name.

公共属性

属性类型描述被定义在

the action currently being executed, null if no active action.

CController

array

Returns the request parameters that will be used for action parameter binding.

CController

Returns the list of clips.

CController

string

the name of the default action.

CController

string

ID of the controller

CController

mixed

the name of the layout to be applied to this controller's views.

CController

the module that this controller belongs to.

CController

string

the page title.

CController

string

the route (module ID, controller ID and action ID) of the current request.

CController

string

the controller ID that is prefixed with the module ID (if any).

CController

string

Returns the directory containing view files for this controller.

CController

公共方法

方法描述被定义在

Calls the named method which is not a class method.

Returns a property value, an event handler list or a behavior based on its name.

Checks if a property value is null.

Sets value of a component property.

Sets a component property to be null.

Returns the access rules for this controller.

CController

Returns a list of external action classes.

CController

Returns the named behavior object.

Attaches a behavior to this component.

Attaches a list of behaviors to the component.

Attaches an event handler to an event.

Begins the rendering of content that is to be decorated by the specified view.

Creates a widget and executes it.

Returns a list of behaviors that this controller should behave as.

CController

Determines whether a property can be read.

Determines whether a property can be set.

Removes all page states.

CController

Creates an absolute URL for the specified action defined in this controller.

CController

Creates the action instance based on the action name.

CController

Creates a relative URL for the specified action defined in this controller.

CController

Creates a widget and initializes it.

Detaches a behavior from the component.

Detaches all behaviors from the component.

Detaches an existing event handler.

Disables an attached behavior.

Disables all behaviors attached to this component.

Enables an attached behavior.

Enables all behaviors attached to this component.

Ends the rendering of content.

Ends the execution of the named widget.

Evaluates a PHP expression or callback under the context of this component.

The filter method for 'accessControl' filter.

CController

The filter method for 'ajaxOnly' filter.

CController

The filter method for 'postOnly' filter.

CController

Returns the filter configurations.

CController

Processes the request using another controller action.

CController

Returns the action currently being executed, null if no active action.

CController

Returns the request parameters that will be used for action parameter binding.

CController

Returns stack of COutputCache objects

CController

Returns the list of clips.

CController

Returns the list of attached event handlers for an event.

Returns ID of the controller

CController

Looks for the layout view script based on the layout name.

CController

Returns the module that this controller belongs to. It returns null

if the controller does not belong to any module

CController

Returns a persistent page state value.

CController

Returns the page title. Defaults to the controller name and the action name.

CController

Returns the route (module ID, controller ID and action ID) of the current request.

CController

Returns the controller ID that is prefixed with the module ID (if any).

CController

Looks for the view file according to the given view name.

CController

Returns the directory containing view files for this controller.

CController

Determines whether an event is defined.

Checks whether the named event has attached handlers.

Determines whether a property is defined.

Initializes the controller.

CController

This method is invoked when the request parameters do not satisfy the requirement of the specified action.

CController

Returns whether the caching stack is empty.

CController

Handles the request whose action is not recognized.

CController

Postprocesses the dynamic output.

CController

Postprocesses the output generated by render().

CController

Records a method call when an output cache is in effect.

CController

Redirects the browser to the specified URL or route (controller/action).

CController

Refreshes the current page.

CController

Renders a view with a layout.

CController

Renders a named clip with the supplied parameters.

CController

Renders dynamic content returned by the specified callback.

CController

This method is internally used.

CController

Renders a view.

CController

Renders a static text string.

CController

Finds a view file based on its name.

CController

Runs the named action.

CController

Runs the action after passing through all filters.

CController

Runs an action with the specified filters.

CController

Sets the action currently being executed.

CController

Saves a persistent page state value.

CController

Sets the page title.

CController

Creates a widget and executes it.

受保护的方法

方法描述被定义在

This method is invoked right after an action is executed.

CController

This method is invoked after the specified view is rendered by calling render().

CController

This method is invoked right before an action is to be executed (after all possible filters.)

CController

This method is invoked at the beginning of render().

CController

Creates the action instance based on the action map.

CController

Loads page states from a hidden input.

CController

Replaces the dynamic content placeholders with actual content.

CController

Saves page states as a base64 string.

CController

属性详情

action属性

the action currently being executed, null if no active action.

actionParams属性

只读 (自版本 v1.1.7 可用)

Returns the request parameters that will be used for action parameter binding.

By default, this method will return $_GET. You may override this method if you

want to use other request parameters (e.g. $_GET+$_POST).

cachingStack属性

只读

public CStack getCachingStack(boolean $createIfNull=true)

stack of COutputCache objects

clips属性

只读

Returns the list of clips.

A clip is a named piece of rendering result that can be

inserted at different places.

defaultAction属性

public string $defaultAction;

the name of the default action. Defaults to 'index'.

id属性

只读

public string getId()

ID of the controller

layout属性

public mixed $layout;

the name of the layout to be applied to this controller's views.

Defaults to null, meaning the application layout

is used. If it is false, no layout will be applied.

The module layout will be used

if the controller belongs to a module and this layout property is null.

module属性

只读

the module that this controller belongs to. It returns null

if the controller does not belong to any module

pageTitle属性

public string getPageTitle()

public void setPageTitle(string $value)

the page title. Defaults to the controller name and the action name.

route属性

只读 (自版本 v1.1.0 可用)

public string getRoute()

the route (module ID, controller ID and action ID) of the current request.

uniqueId属性

只读

public string getUniqueId()

the controller ID that is prefixed with the module ID (if any).

viewPath属性

只读

public string getViewPath()

Returns the directory containing view files for this controller.

The default implementation returns 'protected/views/ControllerID'.

Child classes may override this method to use customized view path.

If the controller belongs to a module, the default view path

is the module view path appended with the controller ID.

方法详情

__construct()

方法

public void __construct(string $id, CWebModule $module=NULL)

$id

string

id of this controller

$module

the module that this controller belongs to.

源码: framework/web/CController.php#110 (

public function__construct($id,$module=null)

{$this->_id=$id;$this->_module=$module;$this->attachBehaviors($this->behaviors());

}

accessRules()

方法

public array accessRules()

{return}

array

list of access rules. See CAccessControlFilter for details about rule specification.

源码: framework/web/CController.php#243 (

public functionaccessRules()

{

return array();

}

Returns the access rules for this controller.

Override this method if you use the accessControl filter.

actions()

方法

public array actions()

{return}

array

list of external action classes

源码: framework/web/CController.php#208 (

public functionactions()

{

return array();

}

Returns a list of external action classes.

Array keys are action IDs, and array values are the corresponding

action class in dot syntax (e.g. 'edit'=>'application.controllers.article.EditArticle')

or arrays representing the configuration of the actions, such as the following,return array(

'action1'=>'path.to.Action1Class',

'action2'=>array(

'class'=>'path.to.Action2Class',

'property1'=>'value1',

'property2'=>'value2',

),

);

Derived classes may override this method to declare external actions.

Note, in order to inherit actions defined in the parent class, a child class needs to

merge the parent actions with child actions using functions like array_merge().

You may import actions from an action provider

(such as a widget, see CWidget::actions), like the following:

return array(

...other actions...

// import actions declared in ProviderClass::actions()

// the action IDs will be prefixed with 'pro.'

'pro.'=>'path.to.ProviderClass',

// similar as above except that the imported actions are

// configured with the specified initial property values

'pro2.'=>array(

'class'=>'path.to.ProviderClass',

'action1'=>array(

'property1'=>'value1',

),

'action2'=>array(

'property2'=>'value2',

),

),

)

In the above, we differentiate action providers from other action

declarations by the array keys. For action providers, the array keys

must contain a dot. As a result, an action ID 'pro2.action1' will

be resolved as the 'action1' action declared in the 'ProviderClass'.

afterAction()

方法

protected void afterAction(CAction $action)

$action

the action just executed.

源码: framework/web/CController.php#1106 (

protected functionafterAction($action)

{

}

This method is invoked right after an action is executed.

You may override this method to do some postprocessing for the action.

afterRender()

方法

(自版本 v1.1.5 可用)

protected void afterRender(string $view, string &$output)

$view

string

the view that has been rendered

$output

string

the rendering result of the view. Note that this parameter is passed

as a reference. That means you can modify it within this method.

源码: framework/web/CController.php#821 (

protected functionafterRender($view, &$output)

{

}

This method is invoked after the specified view is rendered by calling render().

Note that this method is invoked BEFORE processOutput().

You may override this method to do some postprocessing for the view rendering.

beforeAction()

方法

protected boolean beforeAction(CAction $action)

$action

the action to be executed.

{return}

boolean

whether the action should be executed.

源码: framework/web/CController.php#1096 (

protected functionbeforeAction($action)

{

returntrue;

}

This method is invoked right before an action is to be executed (after all possible filters.)

You may override this method to do last-minute preparation for the action.

beforeRender()

方法

(自版本 v1.1.5 可用)

protected boolean beforeRender(string $view)

$view

string

the view to be rendered

{return}

boolean

whether the view should be rendered.

源码: framework/web/CController.php#807 (

protected functionbeforeRender($view)

{

returntrue;

}

This method is invoked at the beginning of render().

You may override this method to do some preprocessing when rendering a view.

behaviors()

方法

public array behaviors()

{return}

array

the behavior configurations (behavior name=>behavior configuration)

源码: framework/web/CController.php#233 (

public functionbehaviors()

{

return array();

}

Returns a list of behaviors that this controller should behave as.

The return value should be an array of behavior configurations indexed by

behavior names. Each behavior configuration can be either a string specifying

the behavior class or an array of the following structure:'behaviorName'=>array(

'class'=>'path.to.BehaviorClass',

'property1'=>'value1',

'property2'=>'value2',

)

Note, the behavior classes must implement IBehavior or extend from

CBehavior. Behaviors declared in this method will be attached

to the controller when it is instantiated.

For more details about behaviors, see CComponent.

clearPageStates()

方法

public void clearPageStates()

源码: framework/web/CController.php#1197 (

public functionclearPageStates()

{$this->_pageStates=array();

}

Removes all page states.

createAbsoluteUrl()

方法

public string createAbsoluteUrl(string $route, array $params=array (

), string $schema='', string $ampersand='&')

$route

string

the URL route. This should be in the format of 'ControllerID/ActionID'.

If the ControllerPath is not present, the current controller ID will be prefixed to the route.

If the route is empty, it is assumed to be the current action.

$params

array

additional GET parameters (name=>value). Both the name and value will be URL-encoded.

$schema

string

schema to use (e.g. http, https). If empty, the schema used for the current request will be used.

$ampersand

string

the token separating name-value pairs in the URL.

{return}

string

the constructed URL

源码: framework/web/CController.php#983 (

public functioncreateAbsoluteUrl($route,$params=array(),$schema='',$ampersand='&')

{$url=$this->createUrl($route,$params,$ampersand);

if(strpos($url,'http')===0)

return$url;

else

returnYii::app()->getRequest()->getHostInfo($schema).$url;

}

Creates an absolute URL for the specified action defined in this controller.

createAction()

方法

public CAction createAction(string $actionID)

$actionID

string

ID of the action. If empty, the default action will be used.

{return}

the action instance, null if the action does not exist.

源码: framework/web/CController.php#411 (

public functioncreateAction($actionID)

{

if($actionID==='')$actionID=$this->defaultAction;

if(method_exists($this,'action'.$actionID) &&strcasecmp($actionID,'s'))// we have actions methodreturn newCInlineAction($this,$actionID);

else

{$action=$this->createActionFromMap($this->actions(),$actionID,$actionID);

if($action!==null&& !method_exists($action,'run'))

throw newCException(Yii::t('yii','Action class {class} must implement the "run" method.', array('{class}'=>get_class($action))));

return$action;

}

}

Creates the action instance based on the action name.

The action can be either an inline action or an object.

The latter is created by looking up the action map specified in actions.

createActionFromMap()

方法

protected CAction createActionFromMap(array $actionMap, string $actionID, string $requestActionID, array $config=array (

))

$actionMap

array

the action map

$actionID

string

the action ID that has its prefix stripped off

$requestActionID

string

the originally requested action ID

$config

array

the action configuration that should be applied on top of the configuration specified in the map

{return}

the action instance, null if the action does not exist.

源码: framework/web/CController.php#438 (

protected functioncreateActionFromMap($actionMap,$actionID,$requestActionID,$config=array())

{

if(($pos=strpos($actionID,'.'))===false&& isset($actionMap[$actionID]))

{$baseConfig=is_array($actionMap[$actionID]) ?$actionMap[$actionID] : array('class'=>$actionMap[$actionID]);

returnYii::createComponent(empty($config)?$baseConfig:array_merge($baseConfig,$config),$this,$requestActionID);

}

elseif($pos===false)

returnnull;// the action is defined in a provider$prefix=substr($actionID,0,$pos+1);

if(!isset($actionMap[$prefix]))

returnnull;$actionID=(string)substr($actionID,$pos+1);$provider=$actionMap[$prefix];

if(is_string($provider))$providerType=$provider;

elseif(is_array($provider) && isset($provider['class']))

{$providerType=$provider['class'];

if(isset($provider[$actionID]))

{

if(is_string($provider[$actionID]))$config=array_merge(array('class'=>$provider[$actionID]),$config);

else$config=array_merge($provider[$actionID],$config);

}

}

else

throw newCException(Yii::t('yii','Object configuration must be an array containing a "class" element.'));$class=Yii::import($providerType,true);$map=call_user_func(array($class,'actions'));

return$this->createActionFromMap($map,$actionID,$requestActionID,$config);

}

Creates the action instance based on the action map.

This method will check to see if the action ID appears in the given

action map. If so, the corresponding configuration will be used to

create the action instance.

createUrl()

方法

public string createUrl(string $route, array $params=array (

), string $ampersand='&')

$route

string

the URL route. This should be in the format of 'ControllerID/ActionID'.

If the ControllerID is not present, the current controller ID will be prefixed to the route.

If the route is empty, it is assumed to be the current action.

If the controller belongs to a module, the module ID

will be prefixed to the route. (If you do not want the module ID prefix, the route should start with a slash '/'.)

$params

array

additional GET parameters (name=>value). Both the name and value will be URL-encoded.

If the name is '#', the corresponding value will be treated as an anchor

and will be appended at the end of the URL.

$ampersand

string

the token separating name-value pairs in the URL.

{return}

string

the constructed URL

源码: framework/web/CController.php#962 (

public functioncreateUrl($route,$params=array(),$ampersand='&')

{

if($route==='')$route=$this->getId().'/'.$this->getAction()->getId();

elseif(strpos($route,'/')===false)$route=$this->getId().'/'.$route;

if($route[0]!=='/'&& ($module=$this->getModule())!==null)$route=$module->getId().'/'.$route;

returnYii::app()->createUrl(trim($route,'/'),$params,$ampersand);

}

Creates a relative URL for the specified action defined in this controller.

filterAccessControl()

方法

public void filterAccessControl(CFilterChain $filterChain)

$filterChain

the filter chain that the filter is on.

源码: framework/web/CController.php#1144 (

public functionfilterAccessControl($filterChain)

{$filter=newCAccessControlFilter;$filter->setRules($this->accessRules());$filter->filter($filterChain);

}

The filter method for 'accessControl' filter.

This filter is a wrapper of CAccessControlFilter.

To use this filter, you must override accessRules method.

filterAjaxOnly()

方法

public void filterAjaxOnly(CFilterChain $filterChain)

$filterChain

the filter chain that the filter is on.

源码: framework/web/CController.php#1130 (

public functionfilterAjaxOnly($filterChain)

{

if(Yii::app()->getRequest()->getIsAjaxRequest())$filterChain->run();

else

throw newCHttpException(400,Yii::t('yii','Your request is invalid.'));

}

The filter method for 'ajaxOnly' filter.

This filter throws an exception (CHttpException with code 400) if the applied action is receiving a non-AJAX request.

filterPostOnly()

方法

public void filterPostOnly(CFilterChain $filterChain)

$filterChain

the filter chain that the filter is on.

源码: framework/web/CController.php#1116 (

public functionfilterPostOnly($filterChain)

{

if(Yii::app()->getRequest()->getIsPostRequest())$filterChain->run();

else

throw newCHttpException(400,Yii::t('yii','Your request is invalid.'));

}

The filter method for 'postOnly' filter.

This filter throws an exception (CHttpException with code 400) if the applied action is receiving a non-POST request.

filters()

方法

public array filters()

{return}

array

a list of filter configurations.

源码: framework/web/CController.php#153 (

public functionfilters()

{

return array();

}

Returns the filter configurations.

By overriding this method, child classes can specify filters to be applied to actions.

This method returns an array of filter specifications. Each array element specify a single filter.

For a method-based filter (called inline filter), it is specified as 'FilterName[ +|- Action1, Action2, ...]',

where the '+' ('-') operators describe which actions should be (should not be) applied with the filter.

For a class-based filter, it is specified as an array like the following:array(

'FilterClass[ +|- Action1, Action2, ...]',

'name1'=>'value1',

'name2'=>'value2',

...

)

where the name-value pairs will be used to initialize the properties of the filter.

Note, in order to inherit filters defined in the parent class, a child class needs to

merge the parent filters with child filters using functions like array_merge().

forward()

方法

(自版本 v1.1.0 可用)

public void forward(string $route, boolean $exit=true)

$route

string

the route of the new controller action. This can be an action ID, or a complete route

with module ID (optional in the current module), controller ID and action ID. If the former, the action is assumed

to be located within the current controller.

$exit

boolean

whether to end the application after this call. Defaults to true.

源码: framework/web/CController.php#747 (

public functionforward($route,$exit=true)

{

if(strpos($route,'/')===false)$this->run($route);

else

{

if($route[0]!=='/'&& ($module=$this->getModule())!==null)$route=$module->getId().'/'.$route;Yii::app()->runController($route);

}

if($exit)Yii::app()->end();

}

Processes the request using another controller action.

This is like redirect, but the user browser's URL remains unchanged.

In most cases, you should call redirect instead of this method.

getAction()

方法

public CAction getAction()

{return}

the action currently being executed, null if no active action.

源码: framework/web/CController.php#493 (

public functiongetAction()

{

return$this->_action;

}

getActionParams()

方法

(自版本 v1.1.7 可用)

public array getActionParams()

{return}

array

the request parameters to be used for action parameter binding

源码: framework/web/CController.php#323 (

public functiongetActionParams()

{

return$_GET;

}

Returns the request parameters that will be used for action parameter binding.

By default, this method will return $_GET. You may override this method if you

want to use other request parameters (e.g. $_GET+$_POST).

getCachingStack()

方法

public CStack getCachingStack(boolean $createIfNull=true)

$createIfNull

boolean

whether to create a stack if it does not exist yet. Defaults to true.

{return}

stack of COutputCache objects

源码: framework/web/CController.php#1072 (

public functiongetCachingStack($createIfNull=true)

{

if(!$this->_cachingStack)$this->_cachingStack=newCStack;

return$this->_cachingStack;

}

getClips()

方法

public CMap getClips()

{return}

the list of clips

源码: framework/web/CController.php#729 (

public functiongetClips()

{

if($this->_clips!==null)

return$this->_clips;

else

return$this->_clips=newCMap;

}

Returns the list of clips.

A clip is a named piece of rendering result that can be

inserted at different places.

getId()

方法

public string getId()

{return}

string

ID of the controller

源码: framework/web/CController.php#509 (

public functiongetId()

{

return$this->_id;

}

getLayoutFile()

方法

public string getLayoutFile(mixed $layoutName)

$layoutName

mixed

layout name

{return}

string

the view file for the layout. False if the view file cannot be found

源码: framework/web/CController.php#636 (

public functiongetLayoutFile($layoutName)

{

if($layoutName===false)

returnfalse;

if(($theme=Yii::app()->getTheme())!==null&& ($layoutFile=$theme->getLayoutFile($this,$layoutName))!==false)

return$layoutFile;

if(empty($layoutName))

{$module=$this->getModule();

while($module!==null)

{

if($module->layout===false)

returnfalse;

if(!empty($module->layout))

break;$module=$module->getParentModule();

}

if($module===null)$module=Yii::app();$layoutName=$module->layout;

}

elseif(($module=$this->getModule())===null)$module=Yii::app();

return$this->resolveViewFile($layoutName,$module->getLayoutPath(),Yii::app()->getViewPath(),$module->getViewPath());

}

Looks for the layout view script based on the layout name.

The layout name can be specified in one of the following ways:layout is false: returns false, meaning no layout.

layout is null: the currently active module's layout will be used. If there is no active module,

the application's layout will be used.

a regular view name.

The resolution of the view file based on the layout view is similar to that in getViewFile.

In particular, the following rules are followed:

Otherwise, this method will return the corresponding view file based on the following criteria:

When a theme is currently active, this method will call CTheme::getLayoutFile to determine

which view file should be returned.

absolute view within a module: the view name starts with a single slash '/'.

In this case, the view will be searched for under the currently active module's view path.

If there is no active module, the view will be searched for under the application's view path.

absolute view within the application: the view name starts with double slashes '//'.

In this case, the view will be searched for under the application's view path.

This syntax has been available since version 1.1.3.

aliased view: the view name contains dots and refers to a path alias.

The view file is determined by calling YiiBase::getPathOfAlias(). Note that aliased views

cannot be themed because they can refer to a view file located at arbitrary places.

relative view: otherwise. Relative views will be searched for under the currently active

module's layout path. In case when there is no active module, the view will be searched for

under the application's layout path.

After the view file is identified, this method may further call CApplication::findLocalizedFile

to find its localized version if internationalization is needed.

getModule()

方法

public CWebModule getModule()

{return}

the module that this controller belongs to. It returns null

if the controller does not belong to any module

源码: framework/web/CController.php#538 (

public functiongetModule()

{

return$this->_module;

}

getPageState()

方法

public mixed getPageState(string $name, mixed $defaultValue=NULL)

$name

string

the state name

$defaultValue

mixed

the value to be returned if the named state is not found

{return}

mixed

the page state value

源码: framework/web/CController.php#1162 (

public functiongetPageState($name,$defaultValue=null)

{

if($this->_pageStates===null)$this->_pageStates=$this->loadPageStates();

return isset($this->_pageStates[$name])?$this->_pageStates[$name]:$defaultValue;

}

Returns a persistent page state value.

A page state is a variable that is persistent across POST requests of the same page.

In order to use persistent page states, the form(s) must be stateful

which are generated using CHtml::statefulForm.

getPageTitle()

方法

public string getPageTitle()

{return}

string

the page title. Defaults to the controller name and the action name.

源码: framework/web/CController.php#995 (

public functiongetPageTitle()

{

if($this->_pageTitle!==null)

return$this->_pageTitle;

else

{$name=ucfirst(basename($this->getId()));

if($this->getAction()!==null&&strcasecmp($this->getAction()->getId(),$this->defaultAction))

return$this->_pageTitle=Yii::app()->name.' - '.ucfirst($this->getAction()->getId()).' '.$name;

else

return$this->_pageTitle=Yii::app()->name.' - '.$name;

}

}

getRoute()

方法

(自版本 v1.1.0 可用)

public string getRoute()

{return}

string

the route (module ID, controller ID and action ID) of the current request.

源码: framework/web/CController.php#526 (

public functiongetRoute()

{

if(($action=$this->getAction())!==null)

return$this->getUniqueId().'/'.$action->getId();

else

return$this->getUniqueId();

}

getUniqueId()

方法

public string getUniqueId()

{return}

string

the controller ID that is prefixed with the module ID (if any).

源码: framework/web/CController.php#517 (

public functiongetUniqueId()

{

return$this->_module?$this->_module->getId().'/'.$this->_id:$this->_id;

}

getViewFile()

方法

public string getViewFile(string $viewName)

$viewName

string

view name

{return}

string

the view file path, false if the view file does not exist

源码: framework/web/CController.php#587 (

public functiongetViewFile($viewName)

{

if(($theme=Yii::app()->getTheme())!==null&& ($viewFile=$theme->getViewFile($this,$viewName))!==false)

return$viewFile;$moduleViewPath=$basePath=Yii::app()->getViewPath();

if(($module=$this->getModule())!==null)$moduleViewPath=$module->getViewPath();

return$this->resolveViewFile($viewName,$this->getViewPath(),$basePath,$moduleViewPath);

}

Looks for the view file according to the given view name.

When a theme is currently active, this method will call CTheme::getViewFile to determine

which view file should be returned.

Otherwise, this method will return the corresponding view file based on the following criteria:absolute view within a module: the view name starts with a single slash '/'.

In this case, the view will be searched for under the currently active module's view path.

If there is no active module, the view will be searched for under the application's view path.

absolute view within the application: the view name starts with double slashes '//'.

In this case, the view will be searched for under the application's view path.

This syntax has been available since version 1.1.3.

aliased view: the view name contains dots and refers to a path alias.

The view file is determined by calling YiiBase::getPathOfAlias(). Note that aliased views

cannot be themed because they can refer to a view file located at arbitrary places.

relative view: otherwise. Relative views will be searched for under the currently active

controller's view path.

After the view file is identified, this method may further call CApplication::findLocalizedFile

to find its localized version if internationalization is needed.

getViewPath()

方法

public string getViewPath()

{return}

string

the directory containing the view files for this controller. Defaults to 'protected/views/ControllerID'.

源码: framework/web/CController.php#551 (

public functiongetViewPath()

{

if(($module=$this->getModule())===null)$module=Yii::app();

return$module->getViewPath().DIRECTORY_SEPARATOR.$this->getId();

}

Returns the directory containing view files for this controller.

The default implementation returns 'protected/views/ControllerID'.

Child classes may override this method to use customized view path.

If the controller belongs to a module, the default view path

is the module view path appended with the controller ID.

init()

方法

public void init()

Initializes the controller.

This method is called by the application before the controller starts to execute.

You may override this method to perform the needed initialization for the controller.

invalidActionParams()

方法

(自版本 v1.1.7 可用)

public void invalidActionParams(CAction $action)

$action

the action being executed

源码: framework/web/CController.php#335 (

public functioninvalidActionParams($action)

{

throw newCHttpException(400,Yii::t('yii','Your request is invalid.'));

}

This method is invoked when the request parameters do not satisfy the requirement of the specified action.

The default implementation will throw a 400 HTTP exception.

isCachingStackEmpty()

方法

public boolean isCachingStackEmpty()

{return}

boolean

whether the caching stack is empty. If not empty, it means currently there are

some output cache in effect. Note, the return result of this method may change when it is

called in different output regions, depending on the partition of output caches.

源码: framework/web/CController.php#1085 (

public functionisCachingStackEmpty()

{

return$this->_cachingStack===null|| !$this->_cachingStack->getCount();

}

Returns whether the caching stack is empty.

loadPageStates()

方法

protected array loadPageStates()

{return}

array

the loaded page states

源码: framework/web/CController.php#1206 (

protected functionloadPageStates()

{

if(!empty($_POST[self::STATE_INPUT_NAME]))

{

if(($data=base64_decode($_POST[self::STATE_INPUT_NAME]))!==false)

{

if(extension_loaded('zlib'))$data=@gzuncompress($data);

if(($data=Yii::app()->getSecurityManager()->validateData($data))!==false)

returnunserialize($data);

}

}

return array();

}

Loads page states from a hidden input.

missingAction()

方法

public void missingAction(string $actionID)

$actionID

string

the missing action name

源码: framework/web/CController.php#484 (

public functionmissingAction($actionID)

{

throw newCHttpException(404,Yii::t('yii','The system is unable to find the requested action "{action}".',

array('{action}'=>$actionID==''?$this->defaultAction:$actionID)));

}

Handles the request whose action is not recognized.

This method is invoked when the controller cannot find the requested action.

The default implementation simply throws an exception.

processDynamicOutput()

方法

public string processDynamicOutput(string $output)

$output

string

output to be processed

{return}

string

the processed output

源码: framework/web/CController.php#375 (

public functionprocessDynamicOutput($output)

{

if($this->_dynamicOutput)

{$output=preg_replace_callback('//',array($this,'replaceDynamicOutput'),$output);

}

return$output;

}

Postprocesses the dynamic output.

This method is internally used. Do not call this method directly.

processOutput()

方法

public string processOutput(string $output)

$output

string

the output generated by the current action

{return}

string

the output that has been processed.

源码: framework/web/CController.php#350 (

public functionprocessOutput($output)

{Yii::app()->getClientScript()->render($output);// if using page caching, we should delay dynamic output replacementif($this->_dynamicOutput!==null&&$this->isCachingStackEmpty())

{$output=$this->processDynamicOutput($output);$this->_dynamicOutput=null;

}

if($this->_pageStates===null)$this->_pageStates=$this->loadPageStates();

if(!empty($this->_pageStates))$this->savePageStates($this->_pageStates,$output);

return$output;

}

Postprocesses the output generated by render().

This method is invoked at the end of render() and renderText().

If there are registered client scripts, this method will insert them into the output

at appropriate places. If there are dynamic contents, they will also be inserted.

This method may also save the persistent page states in hidden fields of

stateful forms in the page.

recordCachingAction()

方法

public void recordCachingAction(string $context, string $method, array $params)

$context

string

a property name of the controller. It refers to an object

whose method is being called. If empty it means the controller itself.

$method

string

the method name

$params

array

parameters passed to the method

源码: framework/web/CController.php#1059 (

public functionrecordCachingAction($context,$method,$params)

{

if($this->_cachingStack)// record only when there is an active output cache{

foreach($this->_cachingStackas$cache)$cache->recordAction($context,$method,$params);

}

}

Records a method call when an output cache is in effect.

When the content is served from the output cache, the recorded

method will be re-invoked.

redirect()

方法

public void redirect(mixed $url, boolean $terminate=true, integer $statusCode=302)

$url

mixed

the URL to be redirected to. If the parameter is an array,

the first element must be a route to a controller action and the rest

are GET parameters in name-value pairs.

$terminate

boolean

whether to terminate the current application after calling this method. Defaults to true.

$statusCode

integer

the HTTP status code. Defaults to 302. See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

for details about HTTP status code.

源码: framework/web/CController.php#1026 (

public functionredirect($url,$terminate=true,$statusCode=302)

{

if(is_array($url))

{$route=isset($url[0]) ?$url[0] :'';$url=$this->createUrl($route,array_splice($url,1));

}Yii::app()->getRequest()->redirect($url,$terminate,$statusCode);

}

Redirects the browser to the specified URL or route (controller/action).

refresh()

方法

public void refresh(boolean $terminate=true, string $anchor='')

$terminate

boolean

whether to terminate the current application after calling this method

$anchor

string

the anchor that should be appended to the redirection URL.

Defaults to empty. Make sure the anchor starts with '#' if you want to specify it.

源码: framework/web/CController.php#1044 (

public functionrefresh($terminate=true,$anchor='')

{$this->redirect(Yii::app()->getRequest()->getUrl().$anchor,$terminate);

}

Refreshes the current page.

The effect of this method call is the same as user pressing the

refresh button on the browser (without post data).

render()

方法

public string render(string $view, array $data=NULL, boolean $return=false)

$view

string

name of the view to be rendered. See getViewFile for details

about how the view script is resolved.

$data

array

data to be extracted into PHP variables and made available to the view script

$return

boolean

whether the rendering result should be returned instead of being displayed to end users.

{return}

string

the rendering result. Null if the rendering result is not required.

源码: framework/web/CController.php#781 (

public functionrender($view,$data=null,$return=false)

{

if($this->beforeRender($view))

{$output=$this->renderPartial($view,$data,true);

if(($layoutFile=$this->getLayoutFile($this->layout))!==false)$output=$this->renderFile($layoutFile,array('content'=>$output),true);$this->afterRender($view,$output);$output=$this->processOutput($output);

if($return)

return$output;

else

echo$output;

}

}

Renders a view with a layout.

This method first calls renderPartial to render the view (called content view).

It then renders the layout view which may embed the content view at appropriate place.

In the layout view, the content view rendering result can be accessed via variable

$content. At the end, it calls processOutput to insert scripts

and dynamic contents if they are available.

By default, the layout view script is "protected/views/layouts/main.php".

This may be customized by changing layout.

renderClip()

方法

(自版本 v1.1.8 可用)

public mixed renderClip(string $name, array $params=array (

), boolean $return=false)

$name

string

the name of the clip

$params

array

an array of named parameters (name=>value) that should replace

their corresponding placeholders in the clip

$return

boolean

whether to return the clip content or echo it.

{return}

mixed

either the clip content or null

源码: framework/web/CController.php#897 (

public functionrenderClip($name,$params=array(),$return=false)

{$text=isset($this->clips[$name]) ?strtr($this->clips[$name],$params) :'';

if($return)

return$text;

else

echo$text;

}

Renders a named clip with the supplied parameters.

This is similar to directly accessing the clips property.

The main difference is that it can take an array of named parameters

which will replace the corresponding placeholders in the clip.

renderDynamic()

方法

public void renderDynamic(callback $callback)

$callback

callback

a PHP callback which returns the needed dynamic content.

When the callback is specified as a string, it will be first assumed to be a method of the current

controller class. If the method does not exist, it is assumed to be a global PHP function.

Note, the callback should return the dynamic content instead of echoing it.

源码: framework/web/CController.php#926 (

public functionrenderDynamic($callback)

{$n=($this->_dynamicOutput===null?0:count($this->_dynamicOutput));

echo"";$params=func_get_args();array_shift($params);$this->renderDynamicInternal($callback,$params);

}

Renders dynamic content returned by the specified callback.

This method is used together with COutputCache. Dynamic contents

will always show as their latest state even if the content surrounding them is being cached.

This is especially useful when caching pages that are mostly static but contain some small

dynamic regions, such as username or current time.

We can use this method to render these dynamic regions to ensure they are always up-to-date.

The first parameter to this method should be a valid PHP callback, while the rest parameters

will be passed to the callback.

Note, the callback and its parameter values will be serialized and saved in cache.

Make sure they are serializable.

renderDynamicInternal()

方法

public void renderDynamicInternal(callback $callback, array $params)

$callback

callback

a PHP callback which returns the needed dynamic content.

$params

array

parameters passed to the PHP callback

源码: framework/web/CController.php#941 (

public functionrenderDynamicInternal($callback,$params)

{$this->recordCachingAction('','renderDynamicInternal',array($callback,$params));

if(is_string($callback) &&method_exists($this,$callback))$callback=array($this,$callback);$this->_dynamicOutput[]=call_user_func_array($callback,$params);

}

This method is internally used.

renderPartial()

方法

public string renderPartial(string $view, array $data=NULL, boolean $return=false, boolean $processOutput=false)

$view

string

name of the view to be rendered. See getViewFile for details

about how the view script is resolved.

$data

array

data to be extracted into PHP variables and made available to the view script

$return

boolean

whether the rendering result should be returned instead of being displayed to end users

$processOutput

boolean

whether the rendering result should be postprocessed using processOutput.

{return}

string

the rendering result. Null if the rendering result is not required.

源码: framework/web/CController.php#868 (

public functionrenderPartial($view,$data=null,$return=false,$processOutput=false)

{

if(($viewFile=$this->getViewFile($view))!==false)

{$output=$this->renderFile($viewFile,$data,true);

if($processOutput)$output=$this->processOutput($output);

if($return)

return$output;

else

echo$output;

}

else

throw newCException(Yii::t('yii','{controller} cannot find the requested view "{view}".',

array('{controller}'=>get_class($this),'{view}'=>$view)));

}

Renders a view.

The named view refers to a PHP script (resolved via getViewFile)

that is included by this method. If $data is an associative array,

it will be extracted as PHP variables and made available to the script.

This method differs from render() in that it does not

apply a layout to the rendered result. It is thus mostly used

in rendering a partial view, or an AJAX response.

renderText()

方法

public string renderText(string $text, boolean $return=false)

$text

string

the static text string

$return

boolean

whether the rendering result should be returned instead of being displayed to end users.

{return}

string

the rendering result. Null if the rendering result is not required.

源码: framework/web/CController.php#833 (

public functionrenderText($text,$return=false)

{

if(($layoutFile=$this->getLayoutFile($this->layout))!==false)$text=$this->renderFile($layoutFile,array('content'=>$text),true);$text=$this->processOutput($text);

if($return)

return$text;

else

echo$text;

}

Renders a static text string.

The string will be inserted in the current controller layout and returned back.

replaceDynamicOutput()

方法

protected string replaceDynamicOutput(array $matches)

$matches

array

matches

{return}

string

the replacement

源码: framework/web/CController.php#391 (

protected functionreplaceDynamicOutput($matches)

{$content=$matches[0];

if(isset($this->_dynamicOutput[$matches[1]]))

{$content=$this->_dynamicOutput[$matches[1]];$this->_dynamicOutput[$matches[1]]=null;

}

return$content;

}

Replaces the dynamic content placeholders with actual content.

This is a callback function used internally.

resolveViewFile()

方法

public mixed resolveViewFile(string $viewName, string $viewPath, string $basePath, string $moduleViewPath=NULL)

$viewName

string

the view name

$viewPath

string

the directory that is used to search for a relative view name

$basePath

string

the directory that is used to search for an absolute view name under the application

$moduleViewPath

string

the directory that is used to search for an absolute view name under the current module.

If this is not set, the application base view path will be used.

{return}

mixed

the view file path. False if the view file does not exist.

源码: framework/web/CController.php#690 (

public functionresolveViewFile($viewName,$viewPath,$basePath,$moduleViewPath=null)

{

if(empty($viewName))

returnfalse;

if($moduleViewPath===null)$moduleViewPath=$basePath;

if(($renderer=Yii::app()->getViewRenderer())!==null)$extension=$renderer->fileExtension;

else$extension='.php';

if($viewName[0]==='/')

{

if(strncmp($viewName,'//',2)===0)$viewFile=$basePath.$viewName;

else$viewFile=$moduleViewPath.$viewName;

}

elseif(strpos($viewName,'.'))$viewFile=Yii::getPathOfAlias($viewName);

else$viewFile=$viewPath.DIRECTORY_SEPARATOR.$viewName;

if(is_file($viewFile.$extension))

returnYii::app()->findLocalizedFile($viewFile.$extension);

elseif($extension!=='.php'&&is_file($viewFile.'.php'))

returnYii::app()->findLocalizedFile($viewFile.'.php');

else

returnfalse;

}

Finds a view file based on its name.

The view name can be in one of the following formats:absolute view within a module: the view name starts with a single slash '/'.

In this case, the view will be searched for under the currently active module's view path.

If there is no active module, the view will be searched for under the application's view path.

absolute view within the application: the view name starts with double slashes '//'.

In this case, the view will be searched for under the application's view path.

This syntax has been available since version 1.1.3.

aliased view: the view name contains dots and refers to a path alias.

The view file is determined by calling YiiBase::getPathOfAlias(). Note that aliased views

cannot be themed because they can refer to a view file located at arbitrary places.

relative view: otherwise. Relative views will be searched for under the currently active

controller's view path.

For absolute view and relative view, the corresponding view file is a PHP file

whose name is the same as the view name. The file is located under a specified directory.

This method will call CApplication::findLocalizedFile to search for a localized file, if any.

run()

方法

public void run(string $actionID)

$actionID

string

action ID

源码: framework/web/CController.php#257 (

public functionrun($actionID)

{

if(($action=$this->createAction($actionID))!==null)

{

if(($parent=$this->getModule())===null)$parent=Yii::app();

if($parent->beforeControllerAction($this,$action))

{$this->runActionWithFilters($action,$this->filters());$parent->afterControllerAction($this,$action);

}

}

else$this->missingAction($actionID);

}

Runs the named action.

Filters specified via filters() will be applied.

runAction()

方法

public void runAction(CAction $action)

$action

action to run

源码: framework/web/CController.php#302 (

public functionrunAction($action)

{$priorAction=$this->_action;$this->_action=$action;

if($this->beforeAction($action))

{

if($action->runWithParams($this->getActionParams())===false)$this->invalidActionParams($action);

else$this->afterAction($action);

}$this->_action=$priorAction;

}

Runs the action after passing through all filters.

This method is invoked by runActionWithFilters after all possible filters have been executed

and the action starts to run.

runActionWithFilters()

方法

public void runActionWithFilters(CAction $action, array $filters)

$action

the action to be executed.

$filters

array

list of filters to be applied to the action.

源码: framework/web/CController.php#283 (

public functionrunActionWithFilters($action,$filters)

{

if(empty($filters))$this->runAction($action);

else

{$priorAction=$this->_action;$this->_action=$action;CFilterChain::create($this,$action,$filters)->run();$this->_action=$priorAction;

}

}

Runs an action with the specified filters.

A filter chain will be created based on the specified filters

and the action will be executed then.

savePageStates()

方法

protected void savePageStates(array $states, string &$output)

$states

array

the states to be saved.

$output

string

the output to be modified. Note, this is passed by reference.

源码: framework/web/CController.php#1226 (

protected functionsavePageStates($states,&$output)

{$data=Yii::app()->getSecurityManager()->hashData(serialize($states));

if(extension_loaded('zlib'))$data=gzcompress($data);$value=base64_encode($data);$output=str_replace(CHtml::pageStateField(''),CHtml::pageStateField($value),$output);

}

Saves page states as a base64 string.

setAction()

方法

public void setAction(CAction $value)

$value

the action currently being executed.

源码: framework/web/CController.php#501 (

public functionsetAction($value)

{$this->_action=$value;

}

setPageState()

方法

public void setPageState(string $name, mixed $value, mixed $defaultValue=NULL)

$name

string

the state name

$value

mixed

the page state value

$defaultValue

mixed

the default page state value. If this is the same as

the given value, the state will be removed from persistent storage.

源码: framework/web/CController.php#1181 (

public functionsetPageState($name,$value,$defaultValue=null)

{

if($this->_pageStates===null)$this->_pageStates=$this->loadPageStates();

if($value===$defaultValue)

unset($this->_pageStates[$name]);

else$this->_pageStates[$name]=$value;$params=func_get_args();$this->recordCachingAction('','setPageState',$params);

}

Saves a persistent page state value.

A page state is a variable that is persistent across POST requests of the same page.

In order to use persistent page states, the form(s) must be stateful

which are generated using CHtml::statefulForm.

setPageTitle()

方法

public void setPageTitle(string $value)

$value

string

the page title.

源码: framework/web/CController.php#1012 (

public functionsetPageTitle($value)

{$this->_pageTitle=$value;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值