chujun2046 发表于 2012-7-11 11:25:20

各位老大们,看了论坛里的文章,感觉你们都是高手,我是个低手,你们说的很多东西我都不懂,我又不聪明,我又想把ci学好,我怎么办呀?小弟求教了

终结者 发表于 2012-7-18 23:18:42

Hex 发表于 2008-12-3 10:28 static/image/common/back.gif
大家多提意见,哪里写的不好,直接提出来,共同学习,共同进步!

谢谢!!!

630088892 发表于 2012-8-13 09:26:39

支持:victory:

yzou 发表于 2012-9-19 17:42:53

最近使用HEX的HMVC发现一个model的问题,在module里面load的model是放在 $CI->$module_class_name 下的,但model里的__get是从$CI里取变量,所以module里面load的model等变量在model里面是访问不了的。

CodeIgniter的CI_Model的__get方法:

function __get($key)
        {
                $CI =& get_instance();
                return $CI->$key;
        }


修改后的CI_Model见附件。

修改Loader文件:

diff --git a/application/core/My_Loader.php b/application/core/My_Loader.php
index 57570bf..23a124f 100755
--- a/application/core/My_Loader.php
+++ b/application/core/My_Loader.php
@@ -372,6 +372,7 @@ class Zen_Loader extends CI_Loader {
                                 {
                                       $CI->$module_class_name->$name = new $model();
                                 }
+                $CI->$module_class_name->$name->set_module_class($module_class_name);
                         }
                         else
                         {





Hex 发表于 2012-9-20 10:00:02

yzou 发表于 2012-9-19 17:42 static/image/common/back.gif
最近使用HEX的HMVC发现一个model的问题,在module里面load的model是放在 $CI->$module_class_name 下的,但 ...

首先,很感谢对HMVC扩展提出意见。

你说的在 module 里 load 的 model 不能在 model 里访问,是说的不能在 module 外面访问吗?
我确实是把 module 隔离起来了,每个 module 是几乎独立的,也就是普通控制器无法访问 module 里的模型等内容。

yzou 发表于 2012-9-23 00:07:32

Hex 发表于 2012-9-20 10:00 static/image/common/back.gif
首先,很感谢对HMVC扩展提出意见。

你说的在 module 里 load 的 model 不能在 model 里访问,是说的不能 ...
我之前说得有点不清楚。我举个例子吧。

1. 在某个module的controller里:.....
class ...... {
public $anything = 'anything';
public function sample()
{
    $this->load->model('model_a');
    $this->load->model('model_b');

    $this->any_var = 'any_var';

    $this->model_a->sample();
    $this->model_b->sample();
}
...
}
2. 在model_a里:...
public function sample()
{
    echo $this->anything;    // 错误,未定义
    echo $this->any_var;    // 错误,未定义
    $this->model_b->sample();
    // 出错,$this->model_b没有定义
}
...3. 在model_b里:...
public function sample()
{
   echo $this->anything;    // 错误,未定义
   echo $this->any_var;    // 错误,未定义
   $this->model_a->sample();
   // 出错,$this->model_a没有定义
}
...
结论:
因为module的变量是放在$CI->$module_class_name下的而不是$CI下,所以需要修改CI_Model的__get()方法。

Hex 发表于 2012-9-24 10:32:29

yzou 发表于 2012-9-23 00:07 static/image/common/back.gif
我之前说得有点不清楚。我举个例子吧。

1. 在某个module的controller里:2. 在model_a里:3. 在model_b ...

这次清楚了~我考虑解决下这个问题。

yzou 发表于 2012-9-24 12:33:54

Hex 发表于 2012-9-24 10:32 static/image/common/back.gif
这次清楚了~我考虑解决下这个问题。

我的项目里正好遇到这个问题了,我按照我#182楼的方法修改了CI_Model的__get方法和Loader的model方法,考虑了几种方法就这个修改的少

Icen 发表于 2012-10-22 11:58:27

支持2.1.3了吗?

Icen 发表于 2012-10-22 16:57:21

yzou 发表于 2012-9-23 00:07 static/image/common/back.gif
我之前说得有点不清楚。我举个例子吧。

1. 在某个module的controller里:2. 在model_a里:3. 在model_b ...

还不是很明白,在model中调用module??
页: 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27
查看完整版本: [3.0.6]为 CI 增加 HMVC 支持【更新日期:2016.4.25】