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

CI比较严重的一个问题

[复制链接]
发表于 2008-5-29 01:20:58 | 显示全部楼层 |阅读模式
给几个数据库table都建了scaffolding,都放在controllers目录下,与其他controller夹杂在一起比较碍眼。文档里说支持子目录,所以在controllers目录下建了个scaffolding子目录,把相关的controller都扔了进去。

打开页面测试下,发现只能打开scaffolding的view页面,其他add、insert、edit等function都无法访问。看了看连接,原来是地址发生错误了。原来应该是http://localhost/ci/index.php/scaffolding/users/s/add,结果连接指的是http://localhost/ci/index.php/scaffolding/users/add,把route.php中设置的scaffolding_trigger的值给漏了。

于是打开Scaffolding.php文件看了看,原来在取segment()的值时,直接用的是固定的数字,显然这是不合适的,在使用子目录时肯定取不完整。
遗憾而无奈的同时,在注释// Set the base URL下的$this->base_url和$this->base_uri做了些须修改:
PHP复制代码
 
        $n = 1;
        $tmp_paths = '';
        while (is_dir(APPPATH . 'controllers/' . $this->CI->uri->segment($n)))
        {
            $tmp_paths .= $this->CI->uri->segment($n) . '/';
            $n++;
        }
        $this->base_url = $this->CI->config->site_url().'/'.$tmp_paths.$this->CI->uri->segment($n).$this->CI->uri->slash_segment($n+1, 'both');
        $this->base_uri = $tmp_paths.$this->CI->uri->segment($n).$this->CI->uri->slash_segment($n+1, 'leading');
 
复制代码


连接没问题了,不过点view上的add new居然没有反应,始终停留在view页面。于是找到Controller.php的_ci_scaffolding()方法,发现这里犯了一个和前面一样的错误:代码想控制scaffolding执行的function,在一个固定的数组之内(array('add', 'insert', 'edit', 'update', 'view', 'delete', 'do_delete')),所以取当前URI中的function值做了个检验。结果在取这个值时,又使用了固定的数字作为segment()的参数……-___-!
照上面的修改很简单就可以解决问题,代码就不重复了。
除了这两处,还有多处对于segment()的使用有问题,问题都是在segment()的获取上。

虽然是个比较小的修改,但这里反应了一些问题:
首先,CI的Sub-folders功能显然存在重大问题,尤其在通过segment()取输入参数时,简单而粗暴地直接通过参数位置获取,让人汗颜。
其次,联系前几日我提的关于checkbox的问题,个人感觉CI的代码的健壮性不敢恭维,还有很长路需要走。可想想CI出来也好几年了,怎么在一些基础问题上还会有如此毛病,实在不可思议。

常见的PHP FW都用了一遍,在PHP4环境下始终找不到一个合适的可以正式使用。CI的“轻框架”似乎是和我的思路最一致的,前前后后也不下三次注意CI,可一深入就让人失望。
牢骚多了点,见谅。

[ 本帖最后由 KnightE 于 2008-5-29 02:39 编辑 ]

评分

参与人数 1威望 +2 收起 理由
Hex + 2 报告问题

查看全部评分

发表于 2008-5-29 01:35:55 | 显示全部楼层
首先,感谢提出 CI 的问题。
对于 CI 还是有一些 BUG 的,特别是新版本。
您可以提交 BUG 报告给官方,或者在官方 BUG 报告里查找这些问题,很多 BUG 都是已经报告过了的。
 楼主| 发表于 2008-5-29 01:40:35 | 显示全部楼层
既然开了个话题,就继续多说几句。
轻框架的最大好处,还是把类库和框架核心分开,解放框架,解放类库。在定义好的平台和接口上,最大限度地扩展框架的功能。CI说是轻框架,其实并不轻,至少不是真正意义上的轻。做不到真的轻框架,还真不如ALL IN ONE的“坦克”来的方便。

既然目标如此清晰,为何CI不大力使用成熟健壮的现有第三方类库呢?有时间辛苦码那么多代码,不如好好定接口,写些Adapter Class来的简单有益。

一年前是我第二次有再看看近距离看看CI的冲动,看看距离第一次了解后是否有了些进步。而当我把libraris下类库都看了一遍后,立刻丧失了继续了解的所有激情。

当然还是得承认,我对CI的了解还是仅限于他的文档和代码,难免有些误解或疏漏。实际还是,因为希望大,所以容易失望大。:)

[ 本帖最后由 KnightE 于 2008-5-29 01:44 编辑 ]
发表于 2008-5-29 01:45:18 | 显示全部楼层
我个人觉得 CI 的可扩展性还是很强的,社区第三方的类库还是很丰富的。
我做了几个基于 CI 的应用,感觉还是很轻量的,呵呵~
 楼主| 发表于 2008-5-29 01:46:49 | 显示全部楼层
原帖由 Hex 于 2008-5-29 01:35 发表
首先,感谢提出 CI 的问题。
对于 CI 还是有一些 BUG 的,特别是新版本。
您可以提交 BUG 报告给官方,或者在官方 BUG 报告里查找这些问题,很多 BUG 都是已经报告过了的。 ...



呵呵,管理员这么晚还在哪。

我相信肯定有人已经提交过了。但面对如此明显的bug,还是让人觉得不可思议。
发表于 2008-5-29 01:50:49 | 显示全部楼层
原帖由 KnightE 于 2008-5-29 01:46 发表



呵呵,管理员这么晚还在哪。

我相信肯定有人已经提交过了。但面对如此明显的bug,还是让人觉得不可思议。

在在~呵呵~
感谢你写出这么详细的问题报告。
我个人觉得出现这个 BUG 的原因可能是脚手架功能只是开发测试时使用的,可能有不完善的地方。CI 官方修改 BUG 的速度确实比较慢,这也是为什么会有 Kohana 的原因吧!
 楼主| 发表于 2008-5-29 01:57:48 | 显示全部楼层
原帖由 Hex 于 2008-5-29 01:45 发表
我个人觉得 CI 的可扩展性还是很强的,社区第三方的类库还是很丰富的。
我做了几个基于 CI 的应用,感觉还是很轻量的,呵呵~


说他不是真轻便,主要有这样一些想法:
首先,要对框架和类库进行解藕,关键还是接口定义。既然要有接口,最起码在框架和类库中间得至少有一个adapter。除了DB一块做了些须处理,其他基本都是硬编码的。这样直接导致你如果要使用自己或第三方的类库,成本会很高;
其次,libraries下所有代码我都浏览了一遍,感觉质量实在一般。一来功能过于简单和单一(可能和CI的定位有关),二来健壮性貌似不是很高。其实在开发中,更多有reusable的部分,并不是类库本身,而是component,这在其他FW中也是比较常见和高效的。CI没有把这个重点提出来,也没显示出他的轻便之处;
然后就是框架本身了,个人觉得同样缺少接口定义,逻辑结构不够清晰,这也让人感觉框架整体不够轻便。


呵呵,优点就不说了,就提提他的缺陷了。

[ 本帖最后由 KnightE 于 2008-5-29 02:00 编辑 ]
 楼主| 发表于 2008-5-29 02:03:22 | 显示全部楼层
原帖由 Hex 于 2008-5-29 01:50 发表

在在~呵呵~
感谢你写出这么详细的问题报告。
我个人觉得出现这个 BUG 的原因可能是脚手架功能只是开发测试时使用的,可能有不完善的地方。CI 官方修改 BUG 的速度确实比较慢,这也是为什么会有 Kohana 的原因吧! ...



从代码层面看,众PHP的FW里,个人还是觉得symfony最高质量。可惜暂时我还不可能完全抛弃PHP4。PHP4自身也快寿终正寝,看来盼望出个好的FW,已经无望。

[ 本帖最后由 KnightE 于 2008-5-29 02:04 编辑 ]
发表于 2008-5-29 02:05:31 | 显示全部楼层
关注 Kohana~~~~~~~~~~~~~~~~
发表于 2008-5-29 02:05:37 | 显示全部楼层
:) 说几个事实吧,可能也是ci的bug:

1、ci确实有bug,有些bug还很无厘头。ci的维护者暂时只有一人,EE的下一版本发布之后该商业软件团队将会一起维护ci;
2、ci推出时的卖点之一就是php4,所以会在php4上多呆一段时间,暂时还没有go php5的日程。我也期待php5版本;
3、scaffolding是一个非常不安全的功能,我猜官方只是让php新手体验一下sql操作的页面。所以对sacffolding的灵活性并没有太多的优化,我个人也认为没有必要优化。如果有需求的话还不如用myphpadmin;对于其他controller不存在类似问题吧。
4、ci的类库是按需调用,即不需要的时候就不调用,和第三方类库没什么区别,只是一起随ci包提供下载而已,如果你不用某个类库(除了框架初始化时使用的四个类库),直接删除,一点问题都没有。

本版积分规则