接上一节继续说,为了实现对数据的自动管理,除了改进模型,我们也同样需要改进控制器。在高级的控制器中,joomla已经实现了编辑,保存,删除,发布,停止发布等常规控制功能,无需自己实现。最多只是在父类提供的方法不足以满足需求的时候,进行重写。
1,本节目标
了解Joomla高级的控制器类
2,理论基础
同模型一样,为了方便开发,joomla 控制器也提供了不同层次的类继承。
- JControllerLegacy这个是基础的控制器类,这个类实现了对MVC架构的支持
- JControllerForm类继承了JControllerLegacy类,在此基础上提供了表单的基本数据管理的操作,比如保存,编辑,新建等,主要是针对一条记录的方法。要支持此方法,需要模型类支持JModelForm类。
- JControllerAdmin类继承了JControllerLegacy类,在其基础上实现了对列表的一些基础管理操作。如:删除,发布,排序,签入等。主要针对的是一系列的记录的方法。
请注意,这里和模型的继承情况不同,在控制器中,JContollerAdmin控制器并没有继承自JControllerForm类,因此,JControllerAdmin类并没有实现针对单个记录的自动数据管理操作。
3,一些说明
1,在Joomla1.5,2.5时代,使用的基础控制器类是JController类,这个类在J3.x以及以上版本中已经不存在了。取代它的是JControllerLegacy类(其中Legacy英文是继承,兼容的意思)
2,Joomla关于MVC各个类的实现源码在网站根目录 libraries\src\MVC 这个目录下面。在实际阅读代码的时候,你会发现上面提到的类并不存在,取而代之的是另外的一些类名。如AdminModel类。FormModel类。这是正常的。出现这个的原因是Joomla和新在对代码进行重构中,将全面使用命名空间的方式来组织代码。为了保持对已有代码的支持,joomla提供了一个类名映射的机制。关于类名映射的具体细节,可以直接查看网站根目录 libraries\classmap.php这个文件,这里面有所有的细节。
3,下面部分代码是有关MVC部分的类名映射:
JLoader::registerAlias('JModelAdmin', '\\Joomla\\CMS\\MVC\\Model\\AdminModel', '5.0'); JLoader::registerAlias('JModelForm', '\\Joomla\\CMS\\MVC\\Model\\FormModel', '5.0'); JLoader::registerAlias('JModelItem', '\\Joomla\\CMS\\MVC\\Model\\ItemModel', '5.0'); JLoader::registerAlias('JModelList', '\\Joomla\\CMS\\MVC\\Model\\ListModel', '5.0'); JLoader::registerAlias('JModelLegacy', '\\Joomla\\CMS\\MVC\\Model\\BaseDatabaseModel', '5.0'); JLoader::registerAlias('JViewCategories', '\\Joomla\\CMS\\MVC\\View\\CategoriesView', '5.0'); JLoader::registerAlias('JViewCategory', '\\Joomla\\CMS\\MVC\\View\\CategoryView', '5.0'); JLoader::registerAlias('JViewCategoryfeed', '\\Joomla\\CMS\\MVC\\View\\CategoryFeedView', '5.0'); JLoader::registerAlias('JViewLegacy', '\\Joomla\\CMS\\MVC\\View\\HtmlView', '5.0'); JLoader::registerAlias('JControllerAdmin', '\\Joomla\\CMS\\MVC\\Controller\\AdminController', '5.0'); JLoader::registerAlias('JControllerLegacy', '\\Joomla\\CMS\\MVC\\Controller\\BaseController', '5.0'); JLoader::registerAlias('JControllerForm', '\\Joomla\\CMS\\MVC\\Controller\\FormController', '5.0'); JLoader::registerAlias('JTableInterface', '\\Joomla\\CMS\\Table\\TableInterface', '5.0'); JLoader::registerAlias('JTable', '\\Joomla\\CMS\\Table\\Table', '5.0'); JLoader::registerAlias('JTableNested', '\\Joomla\\CMS\\Table\\Nested', '5.0');
评论 (0)