-
general
-
alias
- CI
-
autor
-
Rick Ellis
- rockero vuelto programador
-
idea de framework
- simple de usar
- diseñada para el programador php promedio
- sin privilegios de administrador
- usando un hosting estandar
- completamente documentado
- incluye todo lo que se necesita para crear aplicaciones robustas
- tenga una interfaz basada en browser
-
compañía
- pMachine
- Expression Engine
- CMS
-
objetivos
- hacer la vida del programador más simple
-
ahorrar tiempo
- no obligar al programador a aprender demasiados esquemas nuevos
- hacer sites robustos
-
lograr código más sofisticado
- que sea diversión y no tarea
-
autor
-
Rick Ellis
- rockero vuelto programador
- idea de framework
- simple de usar
- diseñada para el programador php promedio
- sin privilegios de administrador
- usando un hosting estandar
- completamente documentado
- incluye todo lo que se necesita para crear aplicaciones robustas
- tenga una interfaz basada en browser
- compañía
- pMachine
- Expression Engine
- CMS
-
módelo de distribución
-
abierto pero propietario
-
autores
- Rick Ellis
- Paul Burdick
-
qué no es
- no tiene generador de código, como Ruby On Rails
-
instalación
-
descomprimir el zip dentro del árbol web
-
renombrar el directorio padre
- por ejemplo myci
-
probar la aplicación
-
por ejemplo http://localhost/myci
- por default aparece la pantalla welcome
-
desarrollo
-
principios
-
Loose coupling
- bajo acople
- tratar de que lo que se haga sea ortogonal
-
Component singularity
- tratar que cada cosa haga algo bien definido
-
directorios
-
CI está en system
-
la aplicación está en application
- la configuración está en config
- config.php
- base_url
- en el controlador, los valores de los item de config se pueden obtener con $this->config->item('item_name')
- routes.php
- mapeo de urls
- database.php
- parámetros de acceso a bases de datos
- autoload.php
- qué clases auxiliares, helpers, etc se cargarán siempre
- los controladores van en controllers
- la clase extiende Controller
- el nombre de la clase empieza con mayúsculas
- MyController extends Controller
- archivo
- nombre en minúsculas
- la extensión es .php
- mycontroller.php
- url
- nombre en minusculas o mayúsculas
- el constructor se llama como la clase
- parent::Controller()
- el método por default es index
- el controlador por default se indica en config/routes.php
- si existe _remap($method) es llamado siempre al comienzo; $method contendrá el método pasado en el url
- si existe _output($output) es llamado al final; $output contiene la salida hasta ese punto y el método debe hacer eco de la salida modificada
- los nombres de los métodos privados van precedidos de _
- no se pueden acceder desde el url
- se pueden crear subdirectorios para organizar los controladores
- sólo un nivel más
- en el url el nombre del subdirectorio precede al del controlador
- para extender el controlador
- crear libraries/MY_Controller.php
- class XController extends Controller
- uso
- class AController extends XController
- las vistas van en views
- archivo
- nombre en minúsculas
- la extensión es .php
- myview.php
- url
- nombre en minusculas o mayúsculas
- en el controlador la vista se carga y se usa en un solo paso
- $this->load->view('view_name', $data)
- $data es opcional
- view_name supone la vista view_name.php, si tiene otra extensión, como .html, hay que ponerla
- sucesivas llamadas a vistas concatenan su salidas
- los items de $data son vueltos variables sueltas para la vista
- $data['a'] en el controlador se extrae como $a en la vista
- si $data es un objeto, será convertido en array para la vista
- $this->load->vars($data) permite hacer la extracción en cualquier momento
- se pueden concatenar varios $this->load->vars()
- por ejemplo, una parte en el constructor, otra parte en un método
- se pueden crear subdirectorios para organizar las vistas
- puede haber varios subniveles
- los modelos están en models
- son opcionales
- la clase extiende Model
- el nombre de la clase empieza con mayúsculas
- MyModel extends Model
- una clase modelo no puede llamarse igual que una clase controlador
- archivo
- nombre en minúsculas
- la extensión es .php
- mymodel.php
- el constructor se llama como la clase
- parent::Model()
- en el controlador el modelo se carga
- $this->load->model('model_name')
- a partir de allí se puede usar $this->model_name
- se pueden crear subdirectorios para organizar los modelos
- puede haber varios subniveles
- los ayudantes están en helpers
- son opcionales
- el helper no es una clase, sino un script
- archivo
- nombre en minúsculas
- el sufijo es _helper
- la extensión es .php
- myhelper_helper.php
- en el controlador el helper se carga
- $this->load->helper('helper_name')
- a partir de allí se pueden usar las funciones del helper
- $this->load->helper(array('helper1', 'helper2', ...))
- para cargar varios helpers a la vez
- para extender un helper, crear uno con el mismo nombre de archivo pero prefijo MY_
- MY_url_helper.php
- el prefijo MY_ se puede cambiar en config.php
- $config['subclass_prefix']
- el prefijo CI_ está reservado
- los plugins están en plugins
- son opcionales
- el plugin no es una clase, sino un script
- archivo
- nombre en minúsculas
- el sufijo es _pi
- la extensión es .php
- myplugin_pi.php
- en el controlador el plugin se carga
- $this->load->plugin('plugin_name', $params)
- $params es opcional
- array('par1'=>'value1', 'par2'=>'value2')
- a partir de allí se pueden usar las funciones del plugin
- $this->load->plugin(array('plugin1', 'plugin2', ...), $params)
- para cargar varios plugins a la vez
- las clases auxiliares están en libraries
- son opcionales
- la clase
- el nombre de la clase empieza con mayúsculas
- MyClass
- archivo
- nombre en minúsculas
- la extensión es .php
- myclass.php
- en el controlador la clase se carga
- $this->load->library('class_name')
- class_name es el nombre de la clase en minúsculas
- a partir de allí se puede usar $this->class_name
- para reemplazar una biblioteca nativa, crear una clase auxiliar con el mismo nombre de archivo pero nombre de clase con prefijo CI_
- Email.php
- class CI_Email
- $this->load->library('email');
- excepto las clases de base de datos
- para extender una biblioteca nativa, crear una clase auxiliar con el mismo nombre de archivo pero nombre de clase con el prefijo MY_ y que extienda a CI_Class_name
- Email.php
- class MY_Email extends CI_Email
- $this->load->library('email');
-
los ayudantes estándar están en system/helpers
- ci busca primero en system/application/helpers, luego en los system/helpers
-
los plugins estandar están en system/plugins
- ci busca primero en system/application/plugins, luego en los system/plugins
-
las clases auxiliares estandar están en system/libraries
- ci busca primero en system/application/libraries, luego en los system/libraries
-
técnicas
-
URL
-
basado en segmentos
- http://hostname/path/appname/index.php/controller_name/method_name/param1/param2
- sin subdirectorios en el controlador
- http://hostname/path/appname/index.php/dir_name/controller_name/method_name/param1/param2
- con subdirectorios en el controlador
- opción por default
- helper suponen url basado en segmentos
-
basado en query_string
- requiere $config['enable_query_strings'] = TRUE
- http://hostname/path/appname/index.php?c=controller_name&m=method_name¶m1=param1¶m2=param2
-
para no mostrar index.php requiere
- .htaccess
- RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
- http://hostname/path/appname/controller_name/method_name/param1/param2
- http://hostname/path/appname/?c=controller_name&m=method_name¶m1=param1¶m2=param2
- RewriteEngine on
RewriteCond $1 !^(assets|user_guide|index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
- para poder acceder también a user_guide y assets
-
scaffolding
- en config.php, asegurarse que $config['base_url'] está bien definido
- en routes.php, asignar una palabra clave a $route['scaffolding_trigger']
-
en el constructor del controlador, cargar el scaffolding de la tabla
- $this->load->scaffolding('nombre_tabla')
- la tabla debe tener una llave primaria
- parece que los enlaces no se forman correctamente si el controlador está en un subdirectorio
- para acceder, en el url ingresar a controller_name/palabra_clave
-
unit testing
- $this->load->library('unit_test')
- $this->unit->run($test, $expected, $test_name)
-
$this->unit->report()
- devuelve html del reporte
-
$this->unit->result()
- devuelve array con el resultado
- $this->unit->active(TRUE|FALSE);
-
referencia
-
helpers
-
url
- site_url()
- base_url()
-
anchor($target, $label)
- el target es relativo
- mailto($email, $label)
-
safe_mailto($email, $label)
- el email es ofuscado usando javascript
-
database
-
db
-
usa ActiveRecord
- la data que viene de la vista se escapa automáticamente
-
select($field | array($field1, $field2, ...))
- establece los campos que se considerarán
-
from($table)
- establece el nombre de la tabla para el query
- join($table, $condicion)
-
where($field, $value)
- establece condición que se une a la anterior (si hubiera) con AND
-
orwhere($field, $value)
- establece condición que se une a la anterior con OR
-
orderby($field1, "asc"|"desc"|"random")
- establece el criterio de orden
- random: cada vez al azar
-
limit($n)
- establece el límite
-
get($table)
- devuelve un query result
- usa el $table de from($table) si existiera
-
set($table)
- establece el nombre de la tabla para el insert o el update
-
insert($table, array($field1=>$value1, $field2=>$value2, ...))
- insert($table)
- usa el $table de set($table) si existiera
-
update($table, array($field1=>$value1, $field2=>$value2, ...))
- update($table)
- usa el $table de set($table) si existiera
- previamente se requiere usar where() para identificar los registros a actualizar
-
delete($table)
- previamente se requiere usar where() para identificar los registros a actualizar
-
query($sql)
- devuelve un query result, resultado de ejecutar $sql
-
affected_rows()
- devuelve el número de filas afectadas
-
insert_id()
- devuelve el id del registro que se acaba de agregar
-
$query
-
result()
- devuelve el resultado del query
- como objeto
-
result_array()
- devuelve el resultado del query
- como array
-
row()
- devuelve una fila del resultado
- como objeto
-
row_array()
- devuelve una fila del resultado
- como array
-
num_rows()
- devuelve el número de filas del resultado
-
free_result()
- libera de la memoria el resultado
-
library
-
output
- es automáticamente inicializada
-
enable_profiler(TRUE|FALSE)
- permite visualizar información util para el desarrollador
-
set_output($output)
- establece manualmente una salida
-
get_output()
- devuelve la salida establecida
-
benchmark
- es automáticamente inicializada
-
mark($label)
- establece una marca
-
elapsed_time($start_label, $end_label)
- tiempo entre dos marcas
-
elapsed_time()
- tiempo total
-
memory_usage()
- memoria total usada
- se coloca en la vista
-
general
-
get_instance()
- devuelve el objeto CodeIgniter
-
show_error($message)
-
muestra un página de error
- An Error Was Encountered
-
show_404()
-
muestra la página de error 404
- Page Not Found
-
log_message('error'|'debug'|'info', $message)
-
escribe en system/logs
- en config.php, requiere $config['log_threshold'] > 0