CodeIgniter sigue el paradigma de programación Modelo-Vista-Controlador.
application/models
class Nombre_modelo extends CI_model { function __construct() { parent::__construct(); $this->load->database(); } }
server{
...
location / {
try_files $uri $uri/ /index.php?/$request_uri;
}
...
}
Si estuviese en un subdirectorio, por ejemplo, ci:
server{
...
location /ci {
try_files $uri $uri/ /ci/index.php?/$request_uri;
}
...
}
Colección de funciones relacionadas.
Una vez cargados, los helpers están disponibles globalmente en los controladores y vistas.
Se almacenan en:
system/helpers: incluidos en CodeIgniterapplication/helpers: creados por el usuario.$this->load->helper('nombre_helper');
Por ejemplo, si queremos cargar un helper llamado url_helper.php:
$this->load->helper('url');
Se pueden cargar varios a la vez:
$this->load->helper( array('helper1', 'helper2', 'helper3') );
Si queremos que algún helper esté disponible para toda la aplicación, añadimos el helper al array de application/config/autoload.php
Si queremos ampliar algunos de los helpers, lo creamos en application/helpers con el mismo nombre, pero añadiéndole el prefijo my. Este prefijo se puede configurar en application/config/config.php:
$config['subclass_prefix'] = 'MY_';
CodeIgniter cuenta con la clase Profiler que permite mostrar resultados de rendimientos, consultas ejecutadas y la información de $_POST en la parte inferior de la página. Esto resulta muy útil durante el desarrollo de una aplicación para ayudar en la depuración y optimización.
Podemos activar el profiler en el método que queramos de la siguiente manera:
$this->output->enable_profiler(TRUE);
Utilidades para interactuar con la base de datos
$this->db->replace()
Ese método ejecuta una sentencia REPLACE que básicamente es un DELETE + INSERT, usando las claves primarios y únicas como factor determinante. Esto ahorra tener que imlementar lógicas complejas con diferentes combinaciones de select(), update(), delete() e insert().
Ejemplo:
$data = array( 'title' => 'My title', 'name' => 'My Name', 'date' => 'My date' ); $this->db->replace('table', $data); // Ejecuta: REPLACE INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
$array = [ 'name' => 'Joe', 'title' => 'Boss', 'status' => 'active' ]; $this->db->where($array);
Lo que hace es :
WHERE name = 'Joe' AND title ='Boss' AND status = 'active'
$colores = ["rojo", "verde", "azul"]; $this->db->where_in("color", $array);
Lo que hace es :
WHERE color IN ('rojo', 'verde', 'azul')
Si lo quisiéramos negar, usaríamos where_not_in:
$colores = ["rojo", "verde", "azul"]; $this->db->where_not_in("color", $array);
Lo que hace es :
WHERE color NOT IN ('rojo', 'verde', 'azul')
Si queremos ver el contenido (no el resultado) de la última consulta a base de datos que se ha lanzado:
$this->db->last_query();
Devolverá algo similar a:
SELECT * FROM tabla ...
También podríamos activar el “profiler” en algún método del controlador y nos dará mucha más información:
$this->output->enable_profiler(TRUE);
La clase E-mail nos facilita el envío de e-mails desde CodeIgniter.
Cargar la biblioteca con los métodos para el envío de e-mails:
$this->load->library('email');
Configuración:
// Configuración email para SMTP $config["protocol"] = "smtp"; $config["smtp_host"] = "smtp.servidor.com"; $config["smtp_user"] = ""; $config["smtp_pass"] = ""; $config["smtp_port"] = 25; $config["charset"] = "utf-8"; $config["mailtype"] = "html"; // Aplica configuración: $this->email->initialize($config);
Composición y envío de e-mail:
$this->email->from('yo@correo.com', 'Yo'); $this->email->to('destinatario@correo.com'); $this->email->bcc('yo@correo.com'); $this->email->subject("Corre de prueba"); $this->email->message("Hola, mundo!"); $this->email->send();
Depuración:
// You need to pass FALSE while sending in order for the email data // to not be cleared - if that happens, print_debugger() would have // nothing to output. if (!$this->email->send(FALSE)) { echo $this->email->print_debugger(); }
Biblioteca personalizada:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * CSVReader Class * * Allows to retrieve a CSV file content as a two dimensional array. * Optionally, the first text line may contains the column names to * be used to retrieve fields values (default). */ class CSVReader { var $fields; // columns names retrieved after parsing var $separator = ','; // separator used to explode each line var $enclosure = '"'; // enclosure used to decorate each field var $max_row_size = 4096; // maximum row size to be used for decoding /** * Parse a file containing CSV formatted data. * * @access public * @param string * @param boolean * @return array */ function parse_file($p_Filepath, $p_NamedFields = true) { $content = false; $file = fopen($p_Filepath, 'r'); if ($p_NamedFields) { $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); } while ( ($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false ) { if ( $row[0] != null ) { // skip empty lines if ( !$content ) { $content = array(); } if ( $p_NamedFields ) { $items = array(); foreach ( $this->fields as $id => $field ) { if ( isset($row[$id]) ) { $items[$field] = $row[$id]; } } $content[] = $items; } else { $content[] = $row; } } } fclose($file); return $content; } } /* Location: ./application/libraries/CSVReader.php */
Para usarla:
$this->load->library('CSVReader'); $csvData = $this->csvreader->parse_file('Test.csv'); //path to csv file