CViewAction
鍖 | system.web.actions |
---|---|
缁ф壙 | class CViewAction » CAction » CComponent |
瀹炵幇 | IAction |
婧愯嚜 | 1.0 |
鐗堟湰 | $Id: CViewAction.php 3426 2011-10-25 00:01:09Z alexander.makarow $ |
婧愮爜 | framework/web/actions/CViewAction.php |
榛樿鎯呭喌涓嬶紝瑕佹樉绀虹殑瑙嗗浘閫氳繃
view
鐨凣ET鎸囧畾銆
GET鍙傛暟鐨勫悕绉拌兘閫氳繃viewParam鑷畾涔夈
濡傛灉鐢ㄦ埛娌℃湁鎻愪緵GET鍙傛暟锛屽皢閫氳繃defaultView
鐨勬寚瀹氭潵鏄剧ず榛樿瑙嗗浘銆
鐢ㄦ埛浣跨敤鏍煎紡
path.to.view
鎸囧畾涓涓鍥撅紝瀹冭缈昏瘧鎴愯鍥惧悕绉
BasePath/path/to/view
锛岃繖閲BasePath
閫氳繃basePath鎸囧畾銆
娉ㄦ剰锛岀敤鎴锋寚瀹氱殑瑙嗗浘浠呰兘鍖呭惈鍗曡瘝绗﹀彿锛岀偣鍜岀牬鎶樺彿銆 鑰屼笖绗竴涓瓧姣嶅繀椤绘槸鍗曡瘝瀛楁瘝銆
鍏叡灞炴
灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|---|
basePath | string | 瑙嗗浘鐨勫熀纭璺緞銆傞粯璁ゆ槸鈥榩ages鈥欍
鍩烘湰璺緞灏嗙粰浠讳綍鐢ㄦ埛鎸囧畾鐨勯〉闈㈣鍥惧姞鍓嶇紑銆
渚嬪锛屽鏋滅敤鎴疯姹tutorial. |
CViewAction |
controller | CController | 鎷ユ湁杩欎釜鍔ㄤ綔鐨勬帶鍒跺櫒銆 | CAction |
defaultView | string | 褰撶敤鎴锋病鏈夋彁渚viewParam鐨凣ET鍙傛暟鏃剁殑榛樿瑙嗗浘鍚嶇О銆傞粯璁や负鈥榠ndex鈥欍 瀹冪殑鏍煎紡搴旇鏄榩ath. | CViewAction |
id | string | 鍔ㄤ綔鐨処D銆 | CAction |
layout | mixed | 琚簲鐢ㄥ埌杩欎釜瑙嗗浘鐨勫竷灞鐨勫悕绉般 杩欏皢鍦ㄨ鍥捐娓叉煋鍓嶏紝琚寚娲惧埌CController::layout銆 榛樿涓簄ull锛屾剰鍛崇潃鎺у埗鍣ㄧ殑layout灏嗚浣跨敤銆 濡傛灉涓篺alse锛屾病鏈塴ayout琚簲鐢ㄣ | CViewAction |
renderAsText | boolean | 鏄惁灏嗗唴瀹瑰綋浣淧HP鑴氭湰鎴栬呴潤鎬佹枃鏈潵娓叉煋銆傞粯璁や负false銆 | CViewAction |
requestedView | string | 杩斿洖鐢ㄦ埛璇锋眰鐨勮鍥剧殑鍚嶇О銆 | CViewAction |
view | string | 瑕佹覆鏌撶殑瑙嗗浘鍚嶇О銆備竴鏃︾敤鎴疯姹傜殑瑙嗗浘琚В鏋愶紝 杩欎釜灞炴у皢琚缃 | CViewAction |
viewParam | string | 鍖呭惈璇锋眰瑙嗗浘鍚嶇О鐨凣ET鍙傛暟鐨勫悕绉般傞粯璁や负鈥榲iew鈥欍 | CViewAction |
鍏叡鏂规硶
鍙椾繚鎶ゆ柟娉
鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|
resolveView() | 瑙f瀽鐢ㄦ埛鑷畾涔夎鍥句负涓涓湁鏁堢殑瑙嗗浘鍚嶇О銆 | CViewAction |
runWithParamsInternal() | 鎵ц涓涓甫鏈夊懡鍚嶅弬鏁扮殑瀵硅薄鐨勬柟娉曘 | CAction |
浜嬩欢
浜嬩欢 | 鎻忚堪 | 瀹氫箟鍦 |
---|---|---|
onBeforeRender | 鍔ㄤ綔璋冪敤娓叉煋鏂规硶鍓嶅彂璧枫 | CViewAction |
onAfterRender | 鍔ㄤ綔璋冪敤娓叉煋鏂规硶鍚庡彂璧枫 | CViewAction |
灞炴ц缁
瑙嗗浘鐨勫熀纭璺緞銆傞粯璁ゆ槸鈥榩ages鈥欍
鍩烘湰璺緞灏嗙粰浠讳綍鐢ㄦ埛鎸囧畾鐨勯〉闈㈣鍥惧姞鍓嶇紑銆
渚嬪锛屽鏋滅敤鎴疯姹tutorial.chap1
锛岃繑鍥炵殑瑙嗗浘鍚嶇О灏嗘槸
pages/tutorial/chap1
锛屽亣璁惧熀纭璺緞鏄pages
銆
瀹為檯鐨勮鍥炬枃浠跺悕閫氳繃CController::getViewFile纭畾銆
褰撶敤鎴锋病鏈夋彁渚viewParam鐨凣ET鍙傛暟鏃剁殑榛樿瑙嗗浘鍚嶇О銆傞粯璁や负鈥榠ndex鈥欍 瀹冪殑鏍煎紡搴旇鏄榩ath.to.view鈥欙紝绫讳技浜庡湪GET鍙傛暟 涓粰瀹氥
鍙傝
琚簲鐢ㄥ埌杩欎釜瑙嗗浘鐨勫竷灞鐨勫悕绉般 杩欏皢鍦ㄨ鍥捐娓叉煋鍓嶏紝琚寚娲惧埌CController::layout銆 榛樿涓簄ull锛屾剰鍛崇潃鎺у埗鍣ㄧ殑layout灏嗚浣跨敤銆 濡傛灉涓篺alse锛屾病鏈塴ayout琚簲鐢ㄣ
鏄惁灏嗗唴瀹瑰綋浣淧HP鑴氭湰鎴栬呴潤鎬佹枃鏈潵娓叉煋銆傞粯璁や负false銆
杩斿洖鐢ㄦ埛璇锋眰鐨勮鍥剧殑鍚嶇О銆 濡傛灉鐢ㄦ埛娌℃湁鎸囧畾浠讳綍瑙嗗浘锛屽垯杩斿洖defaultView銆
瑕佹覆鏌撶殑瑙嗗浘鍚嶇О銆備竴鏃︾敤鎴疯姹傜殑瑙嗗浘琚В鏋愶紝 杩欎釜灞炴у皢琚缃
鍖呭惈璇锋眰瑙嗗浘鍚嶇О鐨凣ET鍙傛暟鐨勫悕绉般傞粯璁や负鈥榲iew鈥欍
鏂规硶璇︾粏
public string getRequestedView()
| ||
{return} | string | 鐢ㄦ埛璇锋眰鐨勮鍥剧殑鍚嶇О銆 浣跨敤鐨勬牸寮忎负鈥榩ath.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銆
public void onAfterRender(CEvent $event)
| ||
$event | CEvent | 浜嬩欢鍙傛暟 |
public function onAfterRender($event)
{
$this->raiseEvent('onAfterRender',$event);
}
鍔ㄤ綔璋冪敤娓叉煋鏂规硶鍚庡彂璧枫
public void onBeforeRender(CEvent $event)
| ||
$event | CEvent | 浜嬩欢鍙傛暟 |
public function onBeforeRender($event)
{
$this->raiseEvent('onBeforeRender',$event);
}
鍔ㄤ綔璋冪敤娓叉煋鏂规硶鍓嶅彂璧枫 浜嬩欢澶勭悊绋嬪簭鑳借缃CEvent::handled灞炴т负true锛 鍋滄杩涗竴姝ョ殑瑙嗗浘娓叉煋銆
protected string resolveView(string $viewPath)
| ||
$viewPath | string | 鏍煎紡鈥榩ath.to.view鈥欑殑鐢ㄦ埛鑷畾涔夎鍥捐矾寰勩 |
{return} | string | 鏍煎紡鈥榩ath/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)));
}
瑙f瀽鐢ㄦ埛鑷畾涔夎鍥句负涓涓湁鏁堢殑瑙嗗浘鍚嶇О銆
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;
}
鎵ц鍔ㄤ綔銆 杩欎釜鏂规硶鏄剧ず鐢ㄦ埛璇锋眰鐨勮鍥俱