Php Zend控制器从两个类扩展而来

Php Zend控制器从两个类扩展而来,php,oop,zend-framework,zend-controller,Php,Oop,Zend Framework,Zend Controller,在我的应用程序中,我有一个主控制器,其中有一些方法。其中一个检查用户是否已登录,如果未登录,则将用户重定向到登录表单等 class FA_Controller_Auth extends Zend_Controller_Action { public function preDispatch() { //chceck user is login } } A所有控制器都从此主类扩展 IndexController extends FA_Controller_Auth{} 但现在我正

在我的应用程序中,我有一个主控制器,其中有一些方法。其中一个检查用户是否已登录,如果未登录,则将用户重定向到登录表单等

class FA_Controller_Auth extends Zend_Controller_Action {
  public function preDispatch() {
   //chceck user is login
  }
}
A所有控制器都从此主类扩展

IndexController extends FA_Controller_Auth{}
但现在我正在从Zend_payment_Controller构建多支付网关,因此payment_网关控制器应该从Zend_payment_Controller扩展。但是我需要检查用户是否登录,我正在寻找类似multi-extend的东西

Payment_GatewayController extends Zend_Payment_Controller, FA_Controller_Auth
我知道在PHP中没有办法使用multi-extend类,但也许有更好的方法,action helper或plugin来检查授权? 问候


尊敬。

您只能扩展一个类。这正是为什么使用基本控制器类被认为是不好的做法,因为它在某种程度上限制了您。相反,您应该将这两个检查的逻辑移到控制器插件中。

非常感谢,这非常有用!但是控制器插件会运行到每个控制器和操作,但是有些操作不需要检查授权,所以我必须做的是禁用此操作的授权检查:
class SilverCms\u controller\u plugin\u Auth扩展Zend\u controller\u plugin\u Abstract{public function dispatchLoopStartup(Zend_Controller_Request_Abstract$oRequest){$sAction=strtolower($oRequest->getActionName());如果($sAction==='confirmEmail'){return;}}
也许有更好的方法可以做到这一点?不,你是如何做到的最好的方法。