model-view-controller - 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 架构还是会引入一些缺陷?
解决方案
是的,您可以拥有多个基本控制器。默认模板代表非常基本的应用程序,因此简化了一些概念。在具有多个基本控制器的大型应用程序中非常常见(例如,单独的模块可以有自己的基本控制器),尽管通常您有一些层次结构并且在继承树的顶部有一个基本控制器。
您可以拥有多个CController
直接扩展的基本控制器,但可能更难引入特定于应用程序的行为 - 在您的情况下,您需要将相同的代码复制到Controller
和Controller2
类。所以通常最好的做法是创建应用程序级的基本控制器,它将作为所有控制器的基础——即使它在开始时是空的,也可以省去在项目后期更改每个控制器的麻烦。
例如,您可能为后端和前端分离了基本控制器,它扩展了一个应用程序级基本控制器:
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)
}
推荐阅读
- javascript - 我可以同时设置.State 和 Sort 吗?
- oracle - 如何从工作流表中检索工作流属性值?
- .htaccess - 如何在 URL 屏蔽时将单个目录 htaccess 重定向到外部 URL
- wordpress - 在 WP admin 中重命名评论标签
- python - 如何从 json 文件中的列表中的值中找到键?
- flutter - Flutter 在静态行之间添加动态行表,具有不同的背景颜色
- python - 如何创建包含不同乐器的多个音轨的 midi 文件?用python和music21
- java - 验证表单时如何重新呈现上一页
- java - Java Mockito - 使用引用类型参数调用的验证方法
- c++ - 具有自动 (launch::async|launch::deferred) 启动策略的 std::async 的语义是什么?