CodeIgniter 和 HMVC 问题

2024-02-24

首先,对这篇文章造成的任何不便表示歉意,因为这是我第一次在这里发布问题,我需要更多时间来适应这个问题。

Q1.我想创建 2 个“主控制器”FrontEnd and BackEnd像这样:

  • MY_控制器延伸CI_控制器
  • FrontEnd延伸MY_控制器所有前端控制器都将扩展FrontEnd.
  • BackEnd延伸MY_控制器所有后端控制器都将扩展BackEnd.

使用 HMVC (MX) 实现此目的的最佳方法是什么?

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

  • ./core/MY_Controller.php(扩展MX_Controller)
  • ./libraries/Backend.php(扩展 MY_Controller)
  • ./libraries/Frontend.php(扩展 MY_Controller)
  • 自动加载Backend and Frontend in 自动加载.php
  • 所有前端控制器都将扩展Frontend (E.g: class Blog extends Frontend)
  • 所有后端控制器将扩展Backend (E.g: class Admin extends Backend)

如果不在后端/前端控制器中再添加一行代码,这是否可行?包含一次 or 需要一次: ./libraries/Backend.php or ./libraries/Backend.php?


Q2。如何用HMVC实现多主题? 例如,在 MVC 中,我们可以有 2 个主题,如下所示:

  • ./应用程序/视图/theme1/view_files.php
  • ./应用程序/视图/theme2/view_files.php

但在 HMVC 中,视图文件夹位于单独的文件夹内,如果我想实现多个主题,通常我必须这样做:

  • ./应用程序/模块/module1/views/theme1/view_files.php
  • ./应用程序/模块/module1/views/theme2/view_files.php
  • ./应用程序/模块/module2/views/theme1/view_files.php
  • ./应用程序/模块/module2/views/theme2/view_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 */

至于“多个主题”,不确定您需要什么。样式表? HTML 模板?您需要让用户切换它们还是手动进行?您是否需要检测移动设备并相应地更改主题?上述所有的? “最好”的方法将取决于您的实施。

我正在考虑创建 2 个从 MY_Controller.php 扩展的库 并自动加载它们。那行得通吗?

不知道为什么你需要或想要......只是不要这样做。您应该只使用其他控制器来扩展这些类。

关于主题,我想要 视图的多个主题,例如: - /views/theme1/view_files.php - /views/theme2/view_files.php 关于js/css/images,我可以安排 我。一开始我会确定主题,但稍后我可能会允许 用户来选择。使用 MVC,我可以将主题放在 /views/ 的子​​文件夹中,如下所示 上面但是对于 HMVC,我必须找到另一种方法来将它们排列到 主题,因为视图文件夹是分开的(我想要的所有视图文件 相同的主题将仅位于 1 个文件夹中)..

由于这个问题太宽泛,无法在这里解决,而且您似乎还没有尝试过任何东西,所以我会给您一个最低限度例子:

class MY_Controller extends MX_Controller {

    public function __construct()
    {
        // do some stuff here that affects all controllers
        $this->theme = 'theme1'; // matches your directory name in /views/themes/
    }

}

从您的控制器:

$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

无论如何,这不是一个完整的解决方案,但希望它能让您开始有了一个想法。有数百万种方法可以做到这一点,这里有两个已经支持主题的模板库:

  • http://codeigniter.com/wiki/Phil_Sturgeon%27s_Template_Library/ http://codeigniter.com/wiki/Phil_Sturgeon%27s_Template_Library/
  • http://williamsconcepts.com/ci/codeigniter/libraries/template/ http://williamsconcepts.com/ci/codeigniter/libraries/template/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodeIgniter 和 HMVC 问题 的相关文章

  • 如何将路径图像用户存储到数据库中:Codeigniter

    我正在尝试将不同用户的图片路径上传到数据库中 我对 codeigniter 很陌生 并且阅读了很多教程 但我仍然在挣扎 这是我的控制器 但我什至不知道如何将图像与用户会话链接 这是我的代码 function do upload config
  • CodeIgniter 配置文件国际化?

    我正在尝试做类似的事情 config first link lang pagination first link config prev link lang pagination prev link config next link lan
  • 在 CodeIgniter 中上传多个文件

    在我的 CodeIgniter 项目中 我在项目创建期间上传文件 这是上传功能 function uploadFiles this gt load gt library upload error 0 projectName POST pro
  • 错误:您必须使用“set”方法来更新条目修复吗?

    我使用 codeigniter 作为我的 PHP 框架 当我将 from to post 提交到数据库时 我不断收到此错误 You must use the set method to update an entry 我不太确定这意味着什么
  • 在 CodeIgniter 会话中存储具有相同名称的多个输入

    我已经发布了这个在 CodeIgniter 论坛中 http codeigniter com forums viewthread 155508 并且也耗尽了论坛搜索引擎 所以如果交叉发帖不被允许 我们深表歉意 本质上 我有一个输入 设置为
  • Codeigniter 回显 [::1] 而不是 localhost

    我正在使用 CodeIgniter 3 作为 Web 平台 并尝试将语义 UI CSS 导入到我的页面中 我正在使用 CodeIgniter 来做到这一点base url 方法中的hrefCSS 导入的属性 但是 semantic css
  • CodeIgniter 中使用 Active Record 的查询中的 DATE_FORMAT 不起作用

    编码员 我在这里遇到一个小问题 找不到解决方案 我正在使用 CI 的 Active Record 构建查询 这是查询的代码 this gt db gt select u id AS user id u email p display nam
  • 我该如何修复此错误:您需要在此活动中使用 Theme.AppCompat 主题(或后代)

    我搜索了所有互联网网站来修复此错误 但我无法解决 我只想创建带有两个按钮 是 和 否 的 AlertDialog 这是我的代码 import android content DialogInterface import android su
  • 如何使用 CodeIgniter 计算 MySQL 中给定行之前的行数?

    简单来说 如何计算某一行之前有多少行 我使用的是增量 ID 但行是随机删除的 因此仅检查 ID 是行不通的 比如说 如果我有 30 行 并且我根据名称 或任何实际内容 选择了一行 那么在该行之前有多少行 它可以是 16 1 12 或任何值
  • CodeIgniter - 为什么使用 xss_clean

    如果我正在清理我的数据库插入 并且还转义我编写的 HTMLhtmlentities text ENT COMPAT UTF 8 是否还需要使用 xss clean 过滤输入 它还有什么其他好处 xss clean http docs gip
  • 使用主题函数在 body 标记后插入代码

    我试图在开头添加一段代码everyDrupal 站点中的页面 因为我有不止一个page模板 我想以编程方式执行此操作 但没有成功 我还是个新手 虽然我了解了钩子 主题函数等的要点 但我只是想不出实现这一目标的正确方法 到目前为止我已经覆盖了
  • Twitter Bootstrap 等前端技术的后端技术 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这是一个类似菜鸟的问题 但我们开始吧 我读过 Twitter Bootstrap 以及其他演示框架 它为设计者 程序员提供了轻松构建
  • 在 Codeigniter 中添加表前缀以加入

    我设置了 Codeigniter 将前缀 kms 添加到我的活动记录查询中 但是 我尝试使用两个 ON 条件进行连接 但它不会将它们放在前面 现在我必须像这样手动添加它们 this gt db gt join site items kms
  • idn_to_ascii():INTL_IDNA_VARIANT_2003 已弃用

    我正在为我的网站使用 codeigniter 框架 但在 form validation 中我收到错误 我按照 stackoverflow 中的此链接操作 但它对我不起作用 跟随链接 5 2 17 中的 idn to ascii https
  • Sense 手机上的 Android 应用程序主题

    我在有关感应手机上的应用程序的 UI 项目上遇到了障碍 我无法在谷歌或SO上制作搜索查询来找到我所追求的任何参考 有没有办法让我的应用程序主题的 UI 样式与手机当前应用的样式相匹配 我基本上追求不同 UI 小部件 复选框 微调器 按钮等
  • CodeIgniter,将数据从模型传递到控制器以在视图中使用

    我想将模型中查询的数据传递给控制器 为此我使用 return data 然后在我使用的控制器中 this gt load gt view my view data 据我了解var dump data 视图中应该显示查询的结果 事实并非如此
  • Codeigniter HMVC Ajax

    我的问题需要一些帮助 我有一个用户列表 我想在 CI HMVC 中使用 ajax 删除用户 onclick 删除按钮 这是我的列表视图的代码 function tip del click function var recId this da
  • 通过日期选择器过滤查询后检索具有特定值的行数[重复]

    这个问题在这里已经有答案了 目前 我正在使用 CodeIgniter 来检索特定时间范围内的数据 所有这些条目都有一个状态 我想将具有相同状态的所有条目分组并将其显示在各自的标题中 目前 这是我的模型类 其中我有以下条目来返回特定日期范围内
  • 如何使用 Angular4 进行 Codeigniter 视图?

    首先 我的 PHP Codeigniter 项目当前在服务器上运行 然后我在服务器上安装了最新的 Angular4 CLI Typescript 但我不知道如何与Codeigniter项目集成 如何像 AngularJS 一样在 Codei
  • 无法读取未定义错误的属性“匹配”

    我试图在 React JS 前端显示一些文本来代替个人资料图像 当它不可用时 基本上 我将当前客户名称传递给一个函数 该函数提取名称中所有单词的第一个字符 我能够仅显示名称 但是当我执行函数调用时 出现 无法读取未定义的属性 匹配 错误 并

随机推荐