Codeigniter:将表单数据从视图传递到控制器

时间:2010-01-07 14:11:29

标签: codeigniter

哪个是对的?注意在第二个选项中,我使用$ _POST变量传递表单值。除了第一个选项,我为每个表单字段调用并分配变量。

我见过这个......

<validation code> ....

$todo = array(
      'name'=>$this->input->post('title'),
      'description'=>$this->input->post('description')
);

$this->Todo_model->add($todo); 

但我也见过以下......

$records['email']    = "trim|required|min_length[4]|xss_clean";
...
...    

$this->validation->set_rules($records);

if ($this->validation->run())
{
   $this->account_model->saveAccountSettings("sam", $_POST);
   $this->session->set_flashdata('message', 'Done!');            

   redirect('account/settings');
} else {
...
} 

3 个答案:

答案 0 :(得分:3)

我倾向于使用两个例子的混合。我很确定trim之类的东西不会修改实际的post数据,因此如果你通过验证框架来获取数据,你只能利用它。实际上,我不再使用CI直接访问POST。

另外我会在你的第二个例子中担心将POST推入我的模型。如果有人聪明地将“姓氏”添加到发送的发布数据并且您的数据库列名称相同,会发生什么?即使你现在没想到要处理这些数据,你也会得到未经验证的数据。这就是为什么我使用你的第一个例子的一部分并手动将我想要保存的项目拉出到一个数组中。

所以我建议使用混合动力。

通常我的代码看起来像这样:

$fields['email']    = "trim|required|valid_email|min_length[4]|xss_clean";
...
...    

$this->validation->set_rules($fields);

if ($this->validation->run())
{
   $account = new array();
   $account['id'] = $accountId; //wherever you get the Id from
   $account['email'] = $this->validation->email;

   $this->account_model->save($account);
   $this->session->set_flashdata('message', 'Done!');            

   redirect('account/settings');
} else {
...
} 

答案 1 :(得分:0)

第一个选项更易于阅读或追踪 使用post变量传递值是更好的选择

答案 2 :(得分:0)

使用此功能的真正好处

$account['email'] = $this->validation->email;

而不是

$account['email'] = $this->input->post('email');