gpt4 book ai didi

CodeIgniter 和 HMVC 问题

转载 作者:行者123 更新时间:2023-12-04 11:29:36 27 4
gpt4 key购买 nike

首先,很抱歉这篇文章带来的任何便利,因为这是我第一次在这里发布问题,我需要更多时间来适应这个问题。

Q1。我想为 创建 2 个“主 Controller ”前端 后台 像这样:

  • MY_ Controller 延长 CI_ Controller
  • 前端 延长 MY_ Controller 并且所有前端 Controller 都将扩展 前端 .
  • 后台 延长 MY_ Controller 并且所有后端 Controller 都将扩展 后台 .

  • 使用 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)
  • 自动加载后台 前端 自动加载.php
  • 所有前端 Controller 都将扩展 前端 (例如:class Blog extends Frontend)
  • 所有后端 Controller 都将扩展 后台 (例如:class Admin extends Backend)

  • 如果不将后端/前端 Controller 中的多行代码添加到 ,这是否可行?包含一次 要求一次 : ./libraries/Backend.php ./libraries/Backend.php ?

    Q2。如何使用 HMVC 实现多个主题?
    例如,在 MVC 中,我们可以有 2 个主题结构如下:
  • ./application/views/主题1 /view_files.php
  • ./application/views/主题2 /view_files.php

  • 但是在 HMVC 中, View 文件夹位于单独的文件夹中,如果我想实现多个主题,通常我必须这样做:
  • ./application/modules/模块1 /views/主题1 /view_files.php
  • ./application/modules/模块1 /views/主题2 /view_files.php
  • ./application/modules/模块2 /views/主题1 /view_files.php
  • ./application/modules/模块2 /views/主题2 /view_files.php

  • 这不是我想要的,因为我想将一个主题的所有 View 文件放在一个文件夹中,然后,如果我想创建一个新主题,我只需要复制一个主题文件夹。但我想知道如何在不破坏 HMVC 模型的情况下做到这一点(因为据我所知,在 HMVC 模型中,模型、 View 、 Controller 必须位于一个模块文件夹中 - 至少使用 CI)。这就是我陷入的冲突。

    最佳答案

    只需打开或创建 core/MY_Controller.php , 创建一个 MY_Controller类并让它扩展MX_Controller ,然后在同一个文件中创建您的其他基本 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 模板?您需要让用户切换它们还是手动进行?您是否需要检测移动设备并相应地更改主题?上述所有的? “最佳”方式将取决于您的实现。

    I am thinking of creating 2 libraries extends from MY_Controller.php and auto load them. Will that work?



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

    About the themes, I want to have multiple themes for views like: - /views/theme1/view_files.php - /views/theme2/view_files.php About js/css/images, I can arrange myself. At the beginning I will fix the theme but later, I may allow user to choose. With MVC, I can put themes in subfolders of /views/ as above but with HMVC, I have to find another way to arrange them in to themes because view folders are separated (I want all view files of same theme will be in only 1 folder)..



    由于这个问题太宽泛,无法在这里解决,而且您似乎还没有尝试过任何东西,我会给您一个 最低限度 例子:
    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/
    }

    }

    从您的 Controller :
    $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://williamsconcepts.com/ci/codeigniter/libraries/template/
  • 关于CodeIgniter 和 HMVC 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788351/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com