如何解决Yii的魔术方法,用于在控制器下控制所有动作
| 突击队需要您的帮助。 我在Yii中有一个控制器:class PageController extends Controller {
public function actionSOMETHING_MAGIC($pagename) {
// Commando will to rendering,etc from here
}
}
我需要Yii CController下的一些魔术方法来控制/ page ||下的所有子请求。页面控制器。
Yii可以这样吗?
谢谢!
解决方法
当然可以。最简单的方法是覆盖
missingAction
方法。
这是默认实现:
public function missingAction($actionID)
{
throw new CHttpException(404,Yii::t(\'yii\',\'The system is unable to find the requested action \"{action}\".\',array(\'{action}\'=>$actionID==\'\'?$this->defaultAction:$actionID)));
}
您可以简单地将其替换为例如
public function missingAction($actionID)
{
echo \'You are trying to execute action: \'.$actionID;
}
在上面,$actionID
是您所指的$pageName
。
稍微更复杂但更强大的方法将是替代createAction
方法。这是默认的实现:
/**
* 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 {@link actions}.
* @param string $actionID ID of the action. If empty,the {@link defaultAction default action} will be used.
* @return CAction the action instance,null if the action does not exist.
* @see actions
*/
public function createAction($actionID)
{
if($actionID===\'\')
$actionID=$this->defaultAction;
if(method_exists($this,\'action\'.$actionID) && strcasecmp($actionID,\'s\')) // we have actions method
return new CInlineAction($this,$actionID);
else
{
$action=$this->createActionFromMap($this->actions(),$actionID,$actionID);
if($action!==null && !method_exists($action,\'run\'))
throw new CException(Yii::t(\'yii\',\'Action class {class} must implement the \"run\" method.\',array(\'{class}\'=>get_class($action))));
return $action;
}
}
例如,在这里,您可以像
public function createAction($actionID)
{
return new CInlineAction($this,\'commonHandler\');
}
public function commonHandler()
{
// This,and only this,will now be called for *all* pages
}
或者,您可以根据自己的要求做一些更复杂的事情。
, 您的意思是CController或Controller(最后一个是您的扩展类)?
如果您像这样扩展CController类:
class Controller extends CController {
public function beforeAction($pagename) {
//doSomeMagicBeforeEveryPageRequest();
}
}
你可以得到你所需要的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。