CodeIgniter和HMVC问题
首先,很抱歉给您带来不便,因为这是我第一次在这里发布问题,我需要更多的时间来适应。 问题1。我想为前端和后端创建两个“主控制器”,如下所示:CodeIgniter和HMVC问题,codeigniter,themes,frontend,backend,hmvc,Codeigniter,Themes,Frontend,Backend,Hmvc,首先,很抱歉给您带来不便,因为这是我第一次在这里发布问题,我需要更多的时间来适应。 问题1。我想为前端和后端创建两个“主控制器”,如下所示: MY_控制器扩展了CI_控制器 前端扩展MY_控制器,所有前端控制器将扩展前端 后端扩展myu控制器,所有后端控制器将扩展后端 使用HMVC(MX)的最佳方法是什么? 感谢@Wesley Murch提出将3个类MY_Controller、Frontend和Backend放入MY_Controller.php的想法,但我认为将每个类放入一个php文件更好
- MY_控制器扩展了CI_控制器
- 前端扩展MY_控制器,所有前端控制器将扩展前端
- 后端扩展myu控制器,所有后端控制器将扩展后端
- ./core/MY_Controller.php(扩展MX_控制器)
- ./libraries/Backend.php(扩展MY_控制器)
- ./libraries/Frontend.php(扩展MY_控制器)
- 在autoload.php中自动加载后端和前端
- 所有前端控制器将扩展前端(例如:
)类博客扩展前端
- 所有后端控制器将扩展后端(例如:
)类管理员扩展后端
问题2。如何使用HMVC实现多个主题? 例如,在MVC中,我们可以有两个主题结构如下:
- ./application/views/主题1/view\u files.php
- ./application/views/主题2/view\u files.php
- ./application/modules/module1/views/theme1/view\u files.php
- ./application/modules/module1/views/主题2/view\u files.php
- ./application/modules/module2/views/主题1/view\u files.php
- ./application/modules/module2/views/theme2/view\u files.php
这不是我想要的,因为我想把一个主题的所有视图文件只放在一个文件夹中,以后,如果我想创建一个新的主题,我只需要复制一个主题文件夹。但我想知道如何在不破坏HMVC模型的情况下做到这一点(因为据我所知,在HMVC模型中,模型、视图、控制器必须位于一个模块文件夹中——至少在CI中是这样)。这就是我遇到的冲突。只需打开或创建
core/MY_Controller.php
,创建一个MY_Controller
类并让它扩展MX_Controller
,然后在同一文件中创建其他基本控制器并让它们扩展MY_Controller
。下面是一个示例,您可以复制/粘贴以开始:
<?php defined('BASEPATH') OR exit('No direct script access.');
class MY_Controller extends MX_Controller {
public function __construct()
{
// do some stuff here that affects all controllers
}
}
class Frontend_Controller extends MY_Controller {
public function __construct()
{
parent::__construct();
}
}
class Backend_Controller extends MY_Controller {
public function __construct()
{
parent::__construct();
// Check admin login, etc.
}
}
/* end file application/core/MY_Controller.php */
从控制器:
$this->load->view('themes/'.$this->theme.'/my_view_file');
使用HMVC,将始终在当前模块中查找该文件,如果该文件不存在,则返回默认应用程序目录。如果出于某种原因需要显式,可以说在路径前面加上模块名(就像模块之间交叉加载资源一样)。例如:
// From "blog" module
$this->load->view('events/index');
// We just loaded `modules/events/views/index` from the blog module
无论如何,这不是一个完整的解决方案,但希望它能让你从一个想法开始。有数百万种方法可以做到这一点,这里有两个已经支持主题的模板库:
class Blog扩展前端
关于主题,因为在HMVC模型中,视图文件夹位于单独的模块文件夹中,这就是为什么我一直坚持将它们分组到一个主题文件夹中的原因。根据您的建议,主题1是在/application/views/内还是在/application/modules/module1/views/内?如果它位于/application/views/内部,HMVC模型将被破坏,对吗?但是如果它在/application/module/module1/views/内,那么如何将一个主题的所有视图文件分组到一个文件夹中(然后,如果我想创建一个新主题,我只需要复制该文件夹),这是非常不寻常的。我发布的(常用)方法有什么问题?另外,请澄清问题,不要发表评论。例如,我可以删除我的答案,没有人会看到你的更新。另外,你在这里问了两个非常不相关的问题,最好把它们分开。对不起,我点击了向上投票箭头,但这是不允许的,因为我只有6分。根据你的建议,我刚刚更新了我的帖子。非常感谢你对我的帮助。我肯定发现你的答案对我澄清创建后端和前端主控制器非常有帮助。唯一让我陷入困境的是将视图文件组织成一个主题
// From "blog" module
$this->load->view('events/index');
// We just loaded `modules/events/views/index` from the blog module