用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3065|回复: 2
收起左侧

关于装载类中的add_package_path方法第二个参数有什么用

[复制链接]
发表于 2012-2-21 01:20:31 | 显示全部楼层 |阅读模式
本帖最后由 moxuanyuan 于 2012-2-21 01:22 编辑

看手册,看到最后的Package view files,实在看不懂,add_package_path方法中的第二个参数有什么用,其中的例子是不是有错啊?

偶也看了Loader.php的原码,大约就是762到775行,代码的意思是,当package中view文件不存在,而$cascade为FALSE时,就退出for循环,究竟有什么用呢?真的看手册,看代码,看到我一头冒水~~~
发表于 2012-2-21 01:43:28 | 显示全部楼层
暂时还没用过 package 的飘过。。。。。。。
发表于 2012-2-21 13:21:33 | 显示全部楼层
hi,看了下源码得出以下结论
$cascade参数是用来屏蔽递归的
模拟一种目录结构如下
---application
-----controller
-------welcome.php
-----view
-------success.php
------third_party
---------billzhao
-------------view
---------------success.php
PHP复制代码
 
/*假设加载目录*/
                $this->load->add_package_path ( APPPATH . 'third_party/billzhao/' , FALSE);
/*得到当前的ViewPath为*/
/*因为unshift所以加载的View路径在最上层
           [_ci_view_paths:protected] => Array
                (
                    [application/third_party/billzhao/views/] => /*FALSE*/

                    [application/views/] => 1
                )
*/
/*配合Load的源码得出*/
                        foreach ($this->_ci_view_paths as $view_file => $cascade)
                        {
                                if (file_exists($view_file.$_ci_file))
                                {
                                        $_ci_path = $view_file.$_ci_file;
                                        $file_exists = TRUE;
                                        break;
                                }
 
                                if ( ! $cascade)
                                {
                                        break;
                                }
                        }
/*当package/views/不存在success的时候,就会抛出错误,而不去寻找Views/success.php页面*/
 
复制代码

本版积分规则