首页 > 解决方案 > Yii 1.1:我可以有多个基本控制器吗?

问题描述

有一个Controller类以protected/components以下评论开头:

/**
 * Controller is the customized base controller class.
 * All controller classes for this application should extend from this base class.
 */
class Controller extends CController {
  ...

我可以定义一个替代的基本控制器吗,可以说Controller2

class Controller2 extends CController {
  ...

并从中派生一些用户控制器?它会违反 Yii 架构还是会引入一些缺陷?

标签: model-view-controlleryiicontrolleryii1.x

解决方案


是的,您可以拥有多个基本控制器。默认模板代表非常基本的应用程序,因此简化了一些概念。在具有多个基本控制器的大型应用程序中非常常见(例如,单独的模块可以有自己的基本控制器),尽管通常您有一些层次结构并且在继承树的顶部有一个基本控制器。

您可以拥有多个CController直接扩展的基本控制器,但可能更难引入特定于应用程序的行为 - 在您的情况下,您需要将相同的代码复制到ControllerController2类。所以通常最好的做法是创建应用程序级的基本控制器,它将作为所有控制器的基础——即使它在开始时是空的,也可以省去在项目后期更改每个控制器的麻烦。

例如,您可能为后端和前端分离了基本控制器,它扩展了一个应用程序级基本控制器:

class FrontendController extends Controller {
    // frontend-specific adjustments
}

class BackendController extends Controller {
    // backend-specific adjustments
}

class Controller extends CController {
    // app-specific adjustments (for backend and frontend)
}

推荐阅读