Держите ваши контроллеры до минимума. Подумайте об использовании ваших контроллеров для передачи данных в и из ваших представлений / моделей. Также я бы предложил выполнить всю тяжелую работу в ваших моделях, 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}
Редактировать: @ сом
Поддержание минимума контроллера - это не то же самое, что сказать: «Не кладите ничего в свой контроллер». Если вы заметили выше, я включил проверку формы в контроллер, однако вы можете исключить конфигурацию 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
));
}
}
приложение / Config / form_validation.php
$config = array('someclass/validate'=>array(
array('field'=>'Field', 'label'=>'Label', 'rules'=>'trim|required|xss_clean|serialize')
));
Смысл, который я пытался сделать, состоял в том, чтобы использовать ваш контроллер только как проход, с минимальной логикой