我只是想知道哪一个更好,或者更推荐用于处理表单数据。
// Controller
// validation etc
$data = array('name'=>$this->input->post('name'), '... etc');
$this->user_model->insert($data);
// Model
function insert($data){
$this->db->insert('users',$data);
}
或
// Controller
// validation etc
$this->user_model->insert();
// Model
function insert($data){
$data = array('name'=>$this->input->post('name'), '... etc');
$this->db->insert('users',$data);
}
我现在正在使用第二种方法。尽管插入没有问题,但我不得不说它不适合更新。我最终必须创建新方法来仅更新表的某些字段。我正在考虑改用第一种方法。我只是想知道是否有人可以帮助给出每种方法更清晰的利弊。
谢谢!
答案 0 :(得分:3)
我同意模型和库应该进行大部分繁重处理,但是我认为模型和库方法应该尽可能可重用,并且Controller应该充当流量控制器,决定调用哪些模型和要发送给他们的数据。
所以在你的例子中,前者更有意义。以这种方式思考 - 除了通过表单帖子之外,您是否可能想要以其他方式添加用户?
另一种选择,如果你想要两全其美,请在模型中创建一个包装函数:
// Controller
// validation etc
$this->user_model->insert_from_post();
// Model
function insert_from_post(){
$data = array('name'=>$this->input->post('name'), '... etc');
$this->insert('users',$data);
}
function insert($data){
$this->db->insert('users',$data);
}
当然在这个例子中似乎过分了。但是在更复杂的应用程序中,您可以快速重用具有已建立,可预测和测试结果的函数。
答案 1 :(得分:0)
将控制器降至最低。考虑使用控制器将数据传入和传出视图/模型。此外,我建议你做模型中的所有繁重的工作,html编码,日期解析等。你的视图应该做的唯一工作是吐出变量或循环它们
Codeigniter 2.1允许您将所有form_validation配置放入application / config / form_validation.php中的一个文件中
所以你的控制器真的需要做的就是说
if ($this->form_validation->run('auth/register')) {/** interact with your models or libraries (keep the heavy stuff outside **/ )}else{//show form}
编辑:@catfish
将控制器保持在最低限度并不是说"不要在控制器中放任何东西"。如果你注意到上面我在控制器中包含了表单验证,但你可以从控制器中排除form_validation配置。
最小控制器看起来像这样。
class someclass extends CI_Controller
{
//The form validation rules go inside the application/config/form_validation.php
//and is called automatically once the class/method is init
public function __construct()
{
parent::__construct();
}
public function form()
{
$this->load->view('templates/public', array('content'=>'form_view.php'));
}
public function validate()
{
if($this->form_validation->run('someclass/validate'))// optionally pass the config key
{
if(Model::method($this->input->post()))
{
//do something positive
}else
{
$this->session->set_flashdata('error', $this->lang->line('some_error'));
redirect('/');
}
}else
{
$this->form();//show form again
}
}
public function work_with_model()
{
$this->load->view('_index', array(
'model_data'=> model::method()// do all looping, html encoding, time/date parsing etc and only send back a string or an array/object ready for output
));
}
}
应用/配置/ form_validation.php
$config = array('someclass/validate'=>array(
array('field'=>'Field', 'label'=>'Label', 'rules'=>'trim|required|xss_clean|serialize')
));
我试图制作的观点只是使用你的控制器作为传递,只需要很少的逻辑