Tabla de Contenidos

CodeIgniter 3

Framework de PHP.

Para consultar notas sobre la versión actual, existe otra página.

Modelo Vista Controlador

CodeIgniter sigue el paradigma de programación Modelo-Vista-Controlador.

Modelo

application/models

class Nombre_modelo extends CI_model {
    function __construct() {
        parent::__construct();
        $this->load->database();
    }
}

Configuración

Nginx

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;
    }
...
}

Componentes

Helpers

Colección de funciones relacionadas.

Una vez cargados, los helpers están disponibles globalmente en los controladores y vistas.

Se almacenan en:

Carga

$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

Extender

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_';

Depuración

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);

Query Builder

Utilidades para interactuar con la base de datos

Actualizar si existe, insertar si no

$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')

Múltiples condiciones en WHERE

$array = [
    'name'   => 'Joe', 
    'title'  => 'Boss', 
    'status' => 'active'
];
 
$this->db->where($array); 

Lo que hace es :

WHERE name = 'Joe' AND title ='Boss' AND status = 'active'

WHERE con varios valores para el mismo campo

$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')

Utilidades

Última consulta a base de datos ejecutada

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);

Bibliotecas

Envío e-mail

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();
}

Lectura CSV

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

Excel