Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CodeIgniter和HMVC问题_Codeigniter_Themes_Frontend_Backend_Hmvc - Fatal编程技术网

CodeIgniter和HMVC问题

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文件更好

首先,很抱歉给您带来不便,因为这是我第一次在这里发布问题,我需要更多的时间来适应。

问题1。我想为前端和后端创建两个“主控制器”,如下所示:

  • MY_控制器扩展了CI_控制器
  • 前端扩展MY_控制器,所有前端控制器将扩展前端
  • 后端扩展myu控制器,所有后端控制器将扩展后端
使用HMVC(MX)的最佳方法是什么?

感谢@Wesley Murch提出将3个类MY_Controller、Frontend和Backend放入MY_Controller.php的想法,但我认为将每个类放入一个php文件更好(更干净)。还是我错了?我在考虑创建一个这样的结构:

  • ./core/MY_Controller.php(扩展MX_控制器)
  • ./libraries/Backend.php(扩展MY_控制器)
  • ./libraries/Frontend.php(扩展MY_控制器)
  • autoload.php中自动加载后端前端
  • 所有前端控制器将扩展前端(例如:
    类博客扩展前端
  • 所有后端控制器将扩展后端(例如:
    类管理员扩展后端
如果不在后端/前端控制器中添加一行代码以包含一次要求一次/libraries/backend.php/libraries/backend.php,这是否有效


问题2。如何使用HMVC实现多个主题? 例如,在MVC中,我们可以有两个主题结构如下:

  • ./application/views/主题1/view\u files.php
  • ./application/views/主题2/view\u files.php
但在HMVC中,视图文件夹位于单独的文件夹中,如果我想实现多个主题,通常我必须这样做:

  • ./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
无论如何,这不是一个完整的解决方案,但希望它能让你从一个想法开始。有数百万种方法可以做到这一点,这里有两个已经支持主题的模板库:


我正在考虑从MY_Controller.php创建两个扩展库,并自动加载它们。这样行吗?关于主题,我想为视图设置多个主题,比如:-/views/theme1/view_files.php-/views/theme2/view_files.php关于js/css/images,我可以自己安排。在开始时,我将修复主题,但稍后,我可能会允许用户选择。使用MVC,我可以将主题放在/views/的子文件夹中,如上所述,但使用HMVC,我必须找到另一种方法将它们排列到主题中,因为视图文件夹是分开的(我希望同一主题的所有视图文件都只放在一个文件夹中)…对不起,我忘了提及,而不是在一个文件中创建两个类,我想从我的_控制器创建2个库后端和前端扩展,并在配置文件中自动加载后端和前端。然后在控制器中,我将扩展如下:
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