从CodeIgniter HMVC中的另一个模块加载控制器

时间:2013-07-04 09:12:45

标签: php codeigniter templates hmvc

我在CodeIgniter HMVC中设置了两个模块。一个是模板,另一个是测试。

这是文件夹结构..

  1. 模板
    • 控制器
      • home.php
    • -----
      • ----。PHP
    • 的观点
      • 布局
        • admin.php的
        • main.php
        • user.php
    • home.php
  2. 测试
    • 控制器
      • test.php的
  3. 我在routes.php中添加了一个路由变量,它将home.php作为模板的默认控制器。和自动加载的模板库。

    现在,当我访问http://mysite.com/templates/home/indexhttp://mysite.com/templates/时,它工作正常,但是当我运行另一个模块(测试)时,它显示错误。我也试过了echo Modules::run('templates/home/index');但同样的问题。我在test.php中有流动的代码

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Test extends MX_Controller {
    
    
        public function index()
        {
           $this->load->module('templates');
           $this->templates->index();
    
        }
    }
    

    它说Unable to load the requested file: home.php

    这是我的模板库

    <?php
    
    if (!defined('BASEPATH'))
        exit('No direct script access allowed');
    
    class Template {
    
        private $template_data = array();
        private $headers = array();
        private $CI;
    
        public function __construct() {
            $this->CI =& get_instance();
            $this->CI->config->load('template');
        }
    
        function set($name, $value) {
            $this->template_data[$name] = $value;
        }
    
        function add_header($header) {
            array_push($this->headers, $header);
        }
    
        function load($template = '', $view = '', $view_data = array(), $return = FALSE) {
            $this->CI = & get_instance();
            $this->set('contents', $this->CI->load->view($view, $view_data, TRUE));
            $this->set('headers', implode('', $this->headers));
            return $this->CI->load->view($template, $this->template_data, $return);
        }
    
    }
    
    /* End of file Template.php */
    /* Location: ./system/application/libraries/Template.php */
    

1 个答案:

答案 0 :(得分:4)

只有当控制器名称与模块名称匹配时,似乎才能加载模块而不指定控制器名称

  

控制器可以作为其他控制器的类变量加载   使用$ this-&gt; load-&gt;模块('module / controller');或者干脆   $这 - &GT;负载&GT;模块( '模块');如果控制器名称匹配   模块名称

https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview

尝试加载模块:

$this->load->module('templates/home');