1、控制器目录中建立目录无法访问默认控制器的解决办法
routes.php的配置是:
$route['default_controller'] = "welcome";
$route['404_override'] = '';
application/controllers目录下新建个目录admin,做为后台用
admin目录下有个welcome.php
通过http://127.0.0.1/index.php/admin访问的页面是404错误。但是通过http://127.0.0.1/index.php/admin/welcome 可以访问。
注明:因为出现这个问题是在win2003+iis6.0上测试的,在“CI中国论坛”没有找到相关资料,但看到了大家不建议CI用在IIS环境下,所以我后来屏蔽了服务器的IIS,并安装了apache。奇怪的是同样无法访问。
经过研究发现,如果想要通过http://127.0.0.1/index.php/admin来访问控制器目录application/controllers/admin/下的默认控制器welcome.php,那么在controllers目录下必须也要有welcome.php控制器。经过测试,apache和iis下都可以通过http://127.0.0.1/index.php/admin来访问admin目录下的默认控制器了。
2、传递中文参数
当我使用jquery的方式获取值,通过URL的方式传参,后台通过$this->uri->segment(n)的方式接收值时是乱码。解决方案是对接收的值经过两次urldecode处理
urldecode(urldecode($this->uri->segment(n)))
这一发现来源于一个项目,源码如下:
$(".edit").bind("click",function(event){//编辑一级分类
var id=$('input[name=id]',$(this).parents('form:first')).val();
var parentId=$('input[name=parentId]',$(this).parents('form:first')).val();
var name=$('input[name=name]',$(this).parents('form:first')).val();
var img=$('input[name=img]',$(this).parents('form:first')).val();
//alert(name);
//name=encodeURIComponent(encodeURIComponent(name));
//alert(encodeURIComponent(name));
//alert(encodeURIComponent(encodeURIComponent(name)));
art.dialog.open(edit_url+'/'+id+'/'+parentId+'/'+name+'/'+img,{id:'edit',title: '修改分类〖'+name+'〗',lock:true,resize:false},false);
}).addClass("pointer");
这里可以对name,用encodeURIComponent两次编码,后台通过urldecode两次解码也可以实现相同功能。但是,如果对name进行两次encodeURIComponent,那么在art.dialog.open方法中的:'修改分类〖'+name+'〗' 中的name将会是编码后的值,而不是汉字。于是去掉encodeURIComponent编码后,发现尽然可以。哪道是CI自动对汉字进行了编码?暂不管这些了。
2012-12-28更新:
上面说了,去掉encodeURIComponent,在后台通过两次urldecode解码后获取中文正常。但是今天将程序上传到服务器确发现不行。原因在于服务器上是IIS6.0,而不是apache,所以,上面所说的内容在IIS6.0下不适用。当然,可以在js脚本中对包含中文的内容两次encodeURIComponent后,在apahce和IIS6.0都可适用。后台接收不变,即两次urldecode对编码的内容进行解码。
3、当编编辑一篇文章时,form_validation如何重新填充表单?
set_value()可以有默认值
set_value('title', isset($article->title) ? $article->title : '');