Cargar un controlador desde un controlador en Codeigniter ¿Cómo hacerlo?
Utilizando CodeIgniter, muchas veces, nos vemos en la necesidad de querer utilizar un controlador maestro y a partir de él derivar tareas a otros controladores que realizan tareas según (por ejemplo) una opción de menú elegida.
Parecería que necesitamos cargar desde un controlador otros controladores, sin embargo este concepto es imposible en la arquitectura MVC que propone este framework. Lo que si podemos hacer es indicar, modelo, vista y tarea a ejecutar, y el modelo es quien realiza las operaciones. No podemos cargar helpers o libraries desde modelos, pero si las podemos cargar en el controlador maestro o de entrada y luego utilizarlas en el modelo porque ya fueron cargadas. Ejemplo:
Controlador de entrada:
class Ejemplo extends Controller { function Ejemplo(){ parent::Controller(); } function index($param=null){ ##obteniendo librerias necesarias $this->load->helper('form'); $this->load->helper('tools'); $this->load->library('session'); if(!is_null($param)){ ## desempaqueto parametros (pueden venir serializados) $param = _unpackParametros($param); ##cargo el modelo de la opcion $this->load->model($param['model']); ##cargo los datos para la vista, llamando al modelo $this->datos = array_merge($this->{$param['model']}->{$param['task']}(), $this->datos); ##seteo la vista a mostrar $view = $param['view']; } ##esta es la vista que puede variar segun la opcion elegida $this->load->view($view, $this->datos); } } |
¿Que ganamos con esto?
Código cerrado ante cambios. Si se agrega una nueva funcionalidad, en el futuro, no queremos tocar el controlador ejemplo, sino que creamos un modelo y una vista que brinde esta nueva funcionalidad y simplemente la subimos.
La variable $param puede ser un valor obtenido por url o bien obtenido de la base de datos.
si te gustó el post, comprame una cerveza!
Categorías: General | Sin Comentarios

