|
首先这个需求是怎样产生的
我发觉CI扩展hex-HMVC后,模型有点让我模糊,怎衡量模型放在相应modules/models下还是放app目录/models下?比如模块1中要调用user模型的get_all方法获取所有用户数据 模块2也要获取这些数据 那么若模块1,2的模型中都创建一个user模型实现各自的get_all方法会不会显得没有重用的味道?
hex提示说可以引入模型继承的概念,于是我尝试在hex的基础上进行扩展
主要修改了code/MY_Loader.php文件
343行 加入了
PHP复制代码
// 加载模块模块继承的原始模型
// @author paperen
$this->_ci_basemodel( $model );
复制代码
1138行
PHP复制代码
/**
* 加载模块继承的基础模型
* 若果模型名称是user_module_model代表要加载user_model模型
* 模块中模型要继承原始模型的名称必须是 模型名称_module_model 这种形式
* @author paperen
* @param string $base_model
*/
private function _ci_basemodel ( $base_model ) {
$module_tag = 'module';
$tmp_arr = explode( '_', $base_model );
if ( !in_array( $module_tag, $tmp_arr ) ) return;
$model_arr = array( );
foreach ( $tmp_arr as $str ) {
if ( $str == $module_tag ) continue;
$model_arr[] = $str;
}
$model_name = implode( '_', $model_arr );
if ( empty( $model_name ) ) return;
$this->model( $model_name );
}
复制代码
实现效果
有一个模块叫user
modules/user/controllers/index.php
PHP复制代码
<?php
class User_Index_Module extends CI_Module
{
public function index() {
// user模型的get_all
$this->load->model( 'user_model' );
$this->user_model->get_all();
// 自身的方法test
$this->load->model( 'user_module_model' );
$this->user_module_model->test();
// 调用来自user_model中的get_all
$this->user_module_model->get_all();
}
}
复制代码
该模块的models中有其一个模型
modules/user/models/user_module_model.php
PHP复制代码
class User_User_Module_model extends User_Model
{
public function test() {
echo '<p>' . __CLASS__ . ' ' . __FUNCTION__ . '</p>';
}
}
复制代码
app的模型目录下存在user模型
application/models/user_model.php
PHP复制代码
class User_model extends CI_Model
{
public function get_all() {
echo '<p>' . __CLASS__ . ' ' . __FUNCTION__ . '</p>';
}
}
复制代码
浏览器访问index.php/module/user/index结果为
- User_model get_all
- User_User_Module_model test
- User_model get_all
复制代码 希望对大家有用
|
评分
-
查看全部评分
|