控制器HMVC内笨负载控制器(CodeIgniter load controller within

2019-08-01 20:37发布

我使用http://github.com/philsturgeon/codeigniter-template/为模板,我试图加载其他控制器以实际查看部分。 我的主要问题是,我无法从其他控制器的元数据(的JavaScript,CSS)附加到主控制器。

应用/型芯/ MY_Loader.php

 class MY_Loader extends CI_Loader { function __construct() { parent::__construct(); } function controller( $sController ) { global $RTR; // Parse the sController string ex: demo/index $aControllerData = explode( '/', $sController ); $sMethod = !empty( $aControllerData[1] ) ? $aControllerData[1] : 'index' ; $sController = !empty( $aControllerData[0] ) ? $aControllerData[0] : $RTR->default_controller ; $sClass = ucfirst( $sController ); $sPath = APPPATH . 'controllers/'; if ( !file_exists( $sPath . $sController . '.php' ) || class_exists( $sClass, FALSE ) ) { set_status_header( 503 ); exit( 'Unable to locate the specified class: '. ucfirst( $sController ).'.php' ); } $this->file( $sPath . $sController . '.php' ); $sClass = new $sClass; if ( !method_exists( $sClass, $sMethod ) ) { set_status_header( 503 ); exit( 'There is no Method: ' . $sMethod . ' in Class: '. ucfirst( $sController ).'.php' ); } $aArguments = func_get_args(); return call_user_func_array( array( $sClass, $sMethod ), array_slice( $aArguments, 1)); } } /* End of file MY_Loader.php */ /* Location: ./controllers/MY_Loader.php */ 

应用/控制器/ demo.php

<?php if ( !defined( 'BASEPATH' ) ) {
    exit( 'No direct script access allowed' );
}

class Demo extends CI_Controller
{

    function index() {

        $this->load->controller('welcome');
        $this->template->set_partial('footer', 'partials/footer')->build('demo');
    }
}

/* End of file welcome.php */
/* Location: ./controllers/demo.php */

应用/控制器/的welcome.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {

    public function index()
    {
        echo 'Loaded welcome controller';
        $this->template->title('Welcome');
        $this->template->append_metadata('<script src="/js/jquery.js"></script>');
        $this->template->set_partial('footer', 'partials/footer')->build('welcome_message');
    }
}

要链接本地主机/演示后,我得到了与泛音界面,一切看起来不错,但我看到有在我的日志装入了多次一些库。

DEBUG - 2012-10-24 08:02:16 --> Database Driver Class Initialized
DEBUG - 2012-10-24 08:02:16 --> User Agent Class Initialized
DEBUG - 2012-10-24 08:02:16 --> Template Class Initialized
DEBUG - 2012-10-24 08:02:16 --> Controller Class Initialized
DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/controllers/welcome.php
DEBUG - 2012-10-24 08:02:16 --> Database Driver Class Initialized
DEBUG - 2012-10-24 08:02:16 --> User Agent Class Initialized
DEBUG - 2012-10-24 08:02:16 --> Template Class Initialized
DEBUG - 2012-10-24 08:02:16 --> Controller Class Initialized
DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/partials/footer.php
DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/views/welcome_message.php
DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/layouts/main.php
DEBUG - 2012-10-24 08:02:16 --> Helper loaded: inflector_helper
DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/partials/footer.php
DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/views/demo.php
DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/layouts/main.php
DEBUG - 2012-10-24 08:02:16 --> Final output sent to browser

我试图用HMVC但有相同的结果。

Answer 1:

我发现了一个解决方案, https://github.com/EllisLab/CodeIgniter/pull/1818有一个真正HMVC和它的作品。 我希望这将包含在即将到来的笨释放。

我的测试结果显示在图像。 控制器/ demo.php

class Demo extends CI_Controller {

    public function index()
    {
        $this->load->controller('welcome');
        $this->load->view('demo');
    }
}

结果http://ikelk.lt/i/108035/o_82a933c1f5.png



文章来源: CodeIgniter load controller within a controller HMVC