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

[已解决] 关于控制器的函数写法

[复制链接]
发表于 2010-1-20 11:28:08 | 显示全部楼层 |阅读模式
大家好:我有个疑问,如果一个控制器的类的两个函数都和某个操作相关,比如,新闻发布(news控制器类)的add方法,有两种情况,一种是用户点击添加时,add()是加载添加新闻的页面,而当用户填完数据点击添加时,实际工作的是另外一个函数(比如,do_add),还是用原来的add()再加一个参数,表示这次是一个添加操作?
 楼主| 发表于 2010-1-20 11:28:35 | 显示全部楼层
哪个比较好一点~?谢谢
发表于 2010-1-20 12:36:04 | 显示全部楼层
关注:)

~~帖子长度要八个字
发表于 2010-1-20 13:04:48 | 显示全部楼层
根本不同的两个方法,一个是填表单,一个是处理提交的表单,概念混淆
发表于 2010-1-20 14:25:43 | 显示全部楼层
个人想法:

同一个控制函数身兼二职,既显示页面又处理表单。相对比较紧凑,比如CI手册里注册验证里的例子,显示视图和处理数据都是同一个方法。
PHP复制代码
 
if ($this->form_validation->run() == FALSE)
  {
//如果不是提交就显示数据
   $this->load->view('myform');
  }
  else
  {
//是提交,处理表单
   $this->user_model->reg();
  }
 
 
复制代码

如果像你的发新闻,也可以这样。但是,这种做法,一般只适合简单的表单处理。原因两方面
1、显示数据和处理表单需要的参数可能不一样,这样,控件器函数的参数不好设置。
2、表单复杂的话,函数代码比较乱。
所以复杂的表单可以新建一个方法,专门来处理表单的数据,处理结束后redirect到显示数据的方法。不过使用这种方式,要防止用户直接在浏览器输入这个方法来访问。
 楼主| 发表于 2010-1-20 16:34:44 | 显示全部楼层
谢谢楼上,:)

本版积分规则