Note: This needs to be seriously tweaked to work better with more complex model functions. I am leaving this up but understand that for now it only handles one-variable model functions easily.
I’m lazy when I code. By lazy I mean I detest retyping the same several codes of line multiple times throughout an app. My motto is (usually) if I have to use a/several line(s) more than 3 times it becomes a function so I can use and re-use it.
If you’re like me, when you use the form features in CI you set up the controller part like so:
if($this->validation->run() == FALSE) {
$data["variable"] = "something";
$this->load->view("view_template",$data);
} else {
$process = $this->model_name->model_function($this->validation->variable);
//Success / error message here
}
That (extremely simple) example uses only 7 lines of code. However, if you have an add + edit function in each controller and you have 10 controllers, that’s (7+7)*10 = 140 lines that are really similar. I hear a function calling my name!
With the function I created I took those six lines of code and reduced them to this:
$this->library_name->validation_run("model_name","model_function",$this->validation->variable,"view_template",array("variable"=>"something");
Pretty sweet, no? 🙂
Below is the function. I am assuming you have a basic to intermediate understanding of CI, so I won’t go into a lot of depth explaining it. I placed validation_run in the custom forms library I use. You can use it in your own custom library or create a library out of it. If you put it in your own library, ensure that the method you are using to reference CI functions is reflected in validation_run ($this->obj,$ci,$this->ci, etc). Also ensure that the Validation and Model are loaded prior to calling validation_run.
function validation($model_name,$model_function,$model_function_variable,$layout_template,$data_array=NULL)
{
if($this->ci->validation->run() == FALSE) {
//This allows the view to be called with or without parameters.
if(!is_null($data_array)) {
$this->ci->load->view($layout_template,$data_array);
} else {
$this->ci->load->view($layout_template);
}
} else {
$process = $this->ci->$model_name->$model_function(
$model_function_variable
);
//Use your favorite redirection method here
}
}
To use it, you’d simply call
$this->library_name->validation_run("model_name","model_function",$this->validation->variable,"view_template",array("variable"=>"something");
For better readability you could do alternatively do it this way:
$this->library_name->validation_run(
"model_name",
"model_function",
$this->validation->variable,
"view_template",
array("variable"=>"something"
);
Of course, you’d replace library_name with the library name you called it from.
Not everyone will have a use for this function; it’s really only good for simple validation “running” . However, it’s saved me so much time coding that I had to share it 🙂
Enjoy!