Der*_*der 3 php inheritance module codeigniter hmvc
假设我们core_crud在控制器中使用类似的东西调用模块:
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Core_crud extends MX_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('mdl_core_crud');
}
public function index()
{
// code goes here
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想用另一个名为的模块来扩展这个模块shop_crud.该shop_crud模块的基本控制器如何?我的意思是我想继承所有控制器方法core_crud和所有模型的东西.
模块的结构
/modules
/core_crud
/controllers
/core_crud.php
/models
/views
/shop_curd
/controllers
/shop_crud.php
/models
/views
Run Code Online (Sandbox Code Playgroud)
代码 core_crud.php
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Core_crud extends MX_Controller
{
function __construct()
{
parent::__construct();
$this->load->model('mdl_core_crud');
}
public function index()
{
// code goes here
}
public function mymethod($param1 = '', $param2 = '')
{
return 'Hello, I am called with paramaters' . $param1 . ' and ' . $param2;
}
}
Run Code Online (Sandbox Code Playgroud)
代码 shop_crud.php
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Shop_crud extends MX_Controller
{
public function __construct()
{
parent::__construct();
//$this->load->model('mdl_shop_curd');
}
public function testmethod()
{
// output directly
$this->load->controller('core_crud/mymethod', array('hello', 'world'));
// capture the output in variables
$myvar = $this->load->controller('core_crud/mymethod', array('hello', 'world'), TRUE);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我不想扩展整个模块/控制器,而只是调用所需的方法.它也很简单.
注意如果模块名称和控制器名称不同,则必须传递路径
module_name/controller_name/mymethod
编辑以支持EXTENDS
文件结构

代码在core_crud.php.
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Core_crud extends MX_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('core_crud/mdl_core_crud');
}
public function index()
{
return 'index';
}
public function check_method($param1 = '')
{
return 'I am from controller core_crud. ' . $this->mdl_core_crud->hello_model() . ' Param is ' . $param1;
}
}
Run Code Online (Sandbox Code Playgroud)
代码在 mdl_core_crud.php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class mdl_core_crud extends CI_Model
{
public function hello_model()
{
return 'I am from model mdl_core_crud.';
}
}
Run Code Online (Sandbox Code Playgroud)
代码在shop_crud.php.
if (!defined('BASEPATH'))
exit('No direct script access allowed');
include_once APPPATH . '/modules/core_crud/controllers/core_crud.php';
class Shop_crud extends Core_crud
{
public function __construct()
{
parent::__construct();
}
public function index()
{
echo parent::check_method('Working.');
}
}
Run Code Online (Sandbox Code Playgroud)
输出: - 我来自控制器core_crud.我来自模特mdl_core_crud.帕拉姆正在工作.
希望这可以帮助.谢谢!!
| 归档时间: |
|
| 查看次数: |
3831 次 |
| 最近记录: |