====== CodeIgniter 3 ====== Framework de [[informatica:programacion:php|PHP]]. * [[https://codeigniter.com|Web oficial]] Para consultar notas sobre la versión actual, existe [[informatica:programacion:php:frameworks:codeigniter|otra página]]. ===== Modelo Vista Controlador ===== CodeIgniter sigue el paradigma de programación Modelo-Vista-Controlador. * Modelo: datos * Vista: resultado visual * Controlador: intermediario entre los datos y la presentación. ==== Modelo ==== ''application/models'' class Nombre_modelo extends CI_model { function __construct() { parent::__construct(); $this->load->database(); } } * https://codeigniter.com/userguide3/database/query_builder.html * https://stackoverflow.com/questions/2479132/how-can-i-load-model-to-helper ===== 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: * ''system/helpers'': incluidos en CodeIgniter * ''application/helpers'': creados por el usuario. === 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); * [[https://www.codeigniter.com/userguide3/database/helpers.html|Otros "helpers" de base de datos]] ===== Bibliotecas ===== ==== Envío e-mail ==== La [[https://codeigniter.com/userguide3/libraries/email.html#|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); * [[https://codeigniter.com/userguide3/libraries/email.html#setting-email-preferences|Opciones de configuración]] 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: 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 ===== * [[https://blog.trescomatres.com/2017/04/codeigniter-exportar-a-excel-con-libreria-phpexcel/|CodeIgniter – Exportar a excel con librería PHPExcel]] * [[https://github.com/PHPOffice/PHPExcel/blob/1.8/Examples/01simple-download-xlsx.php|Ejemplo oficial generando un fichero XLSX]]