Introducción al MVC de CodeIgniter – Parte I

Controladores.

  • Actúa como intermediario entre el requerimiento del usuario y, los modelos, las vistas y otros recursos que generan su respuesta.
  • Su clase base es Controller.
  • Su identificador empieza con minúsculas: user.
  • El nombre de su clase empieza con mayúsculas: User.
  • El nombre de archivo coincide con el identificador y la extensión .php.
  • Se almacenan bajo application/controllers.  Es posible agrupar controladores en subdirectorios, estas rutas se deberán ver reflejadas en el requerimiento del usuario.
  • Si se define un constructor para el controlador: __construct para PHP5, su primera instrucción deberá ser invocar al constructor padre: parent::Controller().
  • Las acciones (o funciones) corresponden con los métodos del controlador y es allí donde se implementa su lógica.
  • Los nombres de las acciones comienzan con minúsculas.
  • Las acciones pueden recibir información adicional del requerimiento de usuario a través de sus parámetros.
  • El controlador por defecto es welcome, esto personalizarse modificando el valor de $route['default_controller'] en application/config/routes.php.
  • La acción por defecto es index.
  • Los controladores y las acciones por defecto son utilizadas si el usuario no las referencia explícitamente en su requerimiento.
  • Para definir métodos privados en el controlador que no serán tomados en cuenta como acciones, deberán declararse como private o protected (PHP5) y su nombre deberá empezar por un guión-bajo (PHP 4 y 5).
  • Es posible personalizar la manipulación de las acciones de un controlador sobreescribiendo el método _remap($method) del último.  No es frecuente hacerlo.
  • Es posible manipular, como postprocesar, la información que va a ser enviada de regreso al usuario desde un controlador sobreescribiendo su método _output($output).  No es frecuente hacerlo.

[source='php']
// Archivo application/controllers/user.php

class User extends Controller
{
public function __construct()
{
parent::Controller();
// Constructor del controlador.
}

public function index()
{
// Acción por defecto.
}

public function changeName($firstName, $lastName)
{
// Acción con parámetros enviados desde el requerimiento.
}

private function _myInternalMethod()
{
// Método privado no acción.
}
}
[/source]

Vistas.

  • Se encarga de preparar y organizar la información resultante que será presentada al usuario como respuesta a su requerimiento.
  • Son archivos con contenido XHTML y PHP.
  • No son invocados directamente, son utilizados por los controladores.
  • El nombre de su identificador puede ser arbitrario.
  • El nombre del archivo será su identificador junto con la extensión .php.
  • Se almacenan bajo application/views.  Es posible agrupar vistas en subdirectorios, estas rutas se deberán ver reflejadas en su llamado desde el controlador.
  • Para cargar una vista desde el controlador: $this -> load -> view('ruta/archivo').  La extensión de la vista puede omitirse si se utilizó la extensión por defecto.
  • Este método envía inmediatamente el contenido de la vista procesada al usuario.
  • Es posible enviar información desde el controlador hacia la vista modificando su carga: $this -> load -> view('ruta/archivo', $data).
  • $data puede ser un arreglo relacional o un objeto.  En el primer caso, las celdas del arreglo se convierten en variables de la vista siendo el índice de cada celda el nombre y el contenido su correspondiente valor de la variable.  De igual manera ocurre en el segundo caso, convirtiéndose en variables de la vista a los atributos del objeto.
  • Es posible cargar una vista y almacenarla en una variable para su posterior uso en lugar de enviarla directamente al usuario: $myView = $this -> load -> view('ruta/archivo', $data, true).

[source='php']
// Archivo application/controllers/user.php

class User extends Controller
{
public function index()
{
$data['title'] = "System Administration";
$data['suibtitle'] = "User management";

$this -> load -> view('user/index', $data);
}
}

// Archivo application/views/user/index.php



< ?php echo $subtitle; ?>


[/source]

Modelos.

  • Representan a la lógica del negocio y la información del sistema.
  • Su clase base es Model.
  • Su identificador empieza con minúsculas: user.
  • El nombre de su clase corresponde con el identificador empezando con mayúsculas y terminando con el postfijo _model: User_model.
  • El nombre de archivo coincide con el nombre de la clase en minúsculas y la extensión .php: user_model.php.
  • Se almacenan bajo application/models.  Es posible agrupar modelos en subdirectorios, estas rutas se deberán ver reflejadas en el momento de invocarlos.
  • Si se define un constructor para el modelo: __construct para PHP5, su primera instrucción deberá ser invocar al constructor padre: parent::Model().
  • Para cargar un modelo desde el controlador: $this -> load -> model('ruta/Nombre_modelo').  Esto comúnmente se realiza en el constructor de la clase que lo utiliza para garantizar su uso a todo su largo.
  • Después de cargado el modelo puede utilizarse de la siguiente manera: $this -> Nombre_modelo -> método().
  • Es posible especificar el nombre del objeto donde se cargan los modelos: $this -> load -> model('ruta/Nombre_modelo', 'otroNombre'), esto permite acceder a él de la siguiente manera: $this -> otroNombre -> método().
  • Un tercer parámetro enviado durante la carga de un modelo le permite a este autoconectarse a la base de datos del sistema: $this -> load -> model('ruta/Nombre_modelo', ", true).
  • Es posible indicarle al framework que cargue automáticamente una lista de modelos al listarlos en el arreglo $autoload['model'] de application/config/autoload.php.

[source='php']
// Archivo application/controllers/user.php

class User extends Controller
{
function __construct()
{
parent::Controller();
$this -> load -> model('admin/user');
}

public function index()
{
$data['info'] = $this -> User -> miMetodo();

$this -> load -> view('user/index', $data);
}
}

// Archivo application/models/admin/user.php

class User_model extends Model
{
function __construct()
{
parent::Model();
}

public function miMetodo()
{
// Implementación de la lógica del negocio
}
}

[/source]

Requerimiento del usuario.

  • El requerimiento del usuario incluye la información que encapsula su solicitud, así como todos los datos requeridos interpretarla.
  • La información proviene desde dos fuentes: el URL (dirección) y el contenido POST (formularios).
  • El URL por defecto sigue este formato: server.com/index.php/controller/action/data1/data2.  Cada parte del URL es conocida como un segmento.  Los segmentos controller y action corresponden con los identificadores del controlador y de la acción, incluyendo las rutas adicionales si se utilizaron, que son requeridos por el usuario.
  • Los segmentos adicionales (data1 y data2) son pasados a la acción como parámetros del método.
  • La información enviada a través de variables POST, como es el caso de los formularios, es recibida a través de la clase Input de la seiguiente manera: $this -> input -> post('nombreVariable', true).  El segundo parámetro (booleano) indica si la variable debe ser o no pasada por el filtro XSS de contenido antes de ser accedida.

Enlaces.

No hay artículos relacionados.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>