保持您的控制器到最低限度。考慮使用您的控制器將數據傳入和傳出您的視圖/模型。此外,我會建議你在你的模型,HTML編碼,日期解析等所有繁重的工作。你的觀點應該做的唯一工作是吐出變量或循環通過他們
Codeigniter 2.1允許你把所有的form_validation配置進入裏面的應用程序一個文件/配置/ 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
));
}
}
的application/config/form_validation.php
$config = array('someclass/validate'=>array(
array('field'=>'Field', 'label'=>'Label', 'rules'=>'trim|required|xss_clean|serialize')
));
的時候,我試圖讓只用你的控制器之間的傳球,用最少的邏輯
是的,我同意你的答案。我認爲最好有2個插入或更新函數,一個是從一個表單文章進行處理,另一個是插入/更新只有必要的內容。插入/更新所有數據只會被表單使用,而像set用戶的狀態/活動/ activation_date可能需要靈活的更新功能。你怎麼看? – Henson 2011-12-21 07:06:23
聽起來沒錯。在某些情況下,我構建了複雜的模型,並使用了活動記錄類的方法鏈接語法,這使得控制器代碼看起來非常好:'$ this-> User_model-> set_username('Henson') - > set_email('whatever @ whoever.tdm') - >插入();' – Thor 2011-12-23 01:18:53