共享 zend 模块控制器以在另一个模块中使用


Share zend module controllers for use in another module

假设我有一个User_RegistrationController,我想在另一个模块中扩展,如下所示:

class Clinic_RegisterController extends User_RegisterController

但我有PHP错误:

( ! ) Fatal error: Class 'User_RegisterController' not found /application/modules/clinic/controllers/RegisterController.php on line 4

有没有办法从另一个模块扩展控制器?

您可以将基本控制器拉入单独的库类中:

class App_Controller_Action_MyController extends Zend_Controller_Action
{
    // your base controller code here
}

然后模块 foo 中的控制器可以为空:

class Foo_MyController extends App_Controller_Action_MyController
{
}

虽然模块 bar 中的控制器可能包含您的覆盖:

class Bar_MyController extends App_Controller_Action_MyController
{
     // override your members/methods
}

不要忘记添加App_作为autoloadernamespace

自动加载机只是没有设置为从其他模块中查找控制器。

如果你想做你正在做的事情,你可以在你的类定义上面添加一个require_once语句:

require_once APPLICATION_PATH . '/modules/user/controllers/RegisterController.php';
class Clinic_RegisterController extends User_RegisterController
{
    //...
}

为什么需要扩展另一个模块的控制器?这会创建对另一个模块的依赖关系。如果两个控制器中都有通用代码,请使用应用程序层中的操作帮助程序。