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();

   }
}
你可以得到你所需要的     

要回复问题请先登录注册