1. general
    1. alias
      1. CI
    2. autor
      1. Rick Ellis
        1. rockero vuelto programador
        2. idea de framework
          1. simple de usar
          2. diseñada para el programador php promedio
          3. sin privilegios de administrador
          4. usando un hosting estandar
          5. completamente documentado
          6. incluye todo lo que se necesita para crear aplicaciones robustas
          7. tenga una interfaz basada en browser
        3. compañía
          1. pMachine
          2. Expression Engine
          3. CMS
    3. objetivos
      1. hacer la vida del programador más simple
      2. ahorrar tiempo
        1. no obligar al programador a aprender demasiados esquemas nuevos
      3. hacer sites robustos
      4. lograr código más sofisticado
        1. que sea diversión y no tarea
      5. autor
        1. Rick Ellis
          1. rockero vuelto programador
          2. idea de framework
          3. simple de usar
          4. diseñada para el programador php promedio
          5. sin privilegios de administrador
          6. usando un hosting estandar
          7. completamente documentado
          8. incluye todo lo que se necesita para crear aplicaciones robustas
          9. tenga una interfaz basada en browser
          10. compañía
          11. pMachine
          12. Expression Engine
          13. CMS
    4. módelo de distribución
      1. abierto pero propietario
        1. autores
          1. Rick Ellis
          2. Paul Burdick
    5. qué no es
      1. no tiene generador de código, como Ruby On Rails
  2. instalación
    1. descomprimir el zip dentro del árbol web
      1. renombrar el directorio padre
        1. por ejemplo myci
    2. probar la aplicación
      1. por ejemplo http://localhost/myci
        1. por default aparece la pantalla welcome
  3. desarrollo
    1. principios
      1. Loose coupling
        1. bajo acople
        2. tratar de que lo que se haga sea ortogonal
      2. Component singularity
        1. tratar que cada cosa haga algo bien definido
    2. directorios
      1. CI está en system
        1. la aplicación está en application
          1. la configuración está en config
          2. config.php
          3. base_url
          4. en el controlador, los valores de los item de config se pueden obtener con $this->config->item('item_name')
          5. routes.php
          6. mapeo de urls
          7. database.php
          8. parámetros de acceso a bases de datos
          9. autoload.php
          10. qué clases auxiliares, helpers, etc se cargarán siempre
          11. los controladores van en controllers
          12. la clase extiende Controller
          13. el nombre de la clase empieza con mayúsculas
          14. MyController extends Controller
          15. archivo
          16. nombre en minúsculas
          17. la extensión es .php
          18. mycontroller.php
          19. url
          20. nombre en minusculas o mayúsculas
          21. el constructor se llama como la clase
          22. parent::Controller()
          23. el método por default es index
          24. el controlador por default se indica en config/routes.php
          25. si existe _remap($method) es llamado siempre al comienzo; $method contendrá el método pasado en el url
          26. 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
          27. los nombres de los métodos privados van precedidos de _
          28. no se pueden acceder desde el url
          29. se pueden crear subdirectorios para organizar los controladores
          30. sólo un nivel más
          31. en el url el nombre del subdirectorio precede al del controlador
          32. para extender el controlador
          33. crear libraries/MY_Controller.php
          34. class XController extends Controller
          35. uso
          36. class AController extends XController
          37. las vistas van en views
          38. archivo
          39. nombre en minúsculas
          40. la extensión es .php
          41. myview.php
          42. url
          43. nombre en minusculas o mayúsculas
          44. en el controlador la vista se carga y se usa en un solo paso
          45. $this->load->view('view_name', $data)
          46. $data es opcional
          47. view_name supone la vista view_name.php, si tiene otra extensión, como .html, hay que ponerla
          48. sucesivas llamadas a vistas concatenan su salidas
          49. los items de $data son vueltos variables sueltas para la vista
          50. $data['a'] en el controlador se extrae como $a en la vista
          51. si $data es un objeto, será convertido en array para la vista
          52. $this->load->vars($data) permite hacer la extracción en cualquier momento
          53. se pueden concatenar varios $this->load->vars()
          54. por ejemplo, una parte en el constructor, otra parte en un método
          55. se pueden crear subdirectorios para organizar las vistas
          56. puede haber varios subniveles
          57. los modelos están en models
          58. son opcionales
          59. la clase extiende Model
          60. el nombre de la clase empieza con mayúsculas
          61. MyModel extends Model
          62. una clase modelo no puede llamarse igual que una clase controlador
          63. archivo
          64. nombre en minúsculas
          65. la extensión es .php
          66. mymodel.php
          67. el constructor se llama como la clase
          68. parent::Model()
          69. en el controlador el modelo se carga
          70. $this->load->model('model_name')
          71. a partir de allí se puede usar $this->model_name
          72. se pueden crear subdirectorios para organizar los modelos
          73. puede haber varios subniveles
          74. los ayudantes están en helpers
          75. son opcionales
          76. el helper no es una clase, sino un script
          77. archivo
          78. nombre en minúsculas
          79. el sufijo es _helper
          80. la extensión es .php
          81. myhelper_helper.php
          82. en el controlador el helper se carga
          83. $this->load->helper('helper_name')
          84. a partir de allí se pueden usar las funciones del helper
          85. $this->load->helper(array('helper1', 'helper2', ...))
          86. para cargar varios helpers a la vez
          87. para extender un helper, crear uno con el mismo nombre de archivo pero prefijo MY_
          88. MY_url_helper.php
          89. el prefijo MY_ se puede cambiar en config.php
          90. $config['subclass_prefix']
          91. el prefijo CI_ está reservado
          92. los plugins están en plugins
          93. son opcionales
          94. el plugin no es una clase, sino un script
          95. archivo
          96. nombre en minúsculas
          97. el sufijo es _pi
          98. la extensión es .php
          99. myplugin_pi.php
          100. en el controlador el plugin se carga
          101. $this->load->plugin('plugin_name', $params)
          102. $params es opcional
          103. array('par1'=>'value1', 'par2'=>'value2')
          104. a partir de allí se pueden usar las funciones del plugin
          105. $this->load->plugin(array('plugin1', 'plugin2', ...), $params)
          106. para cargar varios plugins a la vez
          107. las clases auxiliares están en libraries
          108. son opcionales
          109. la clase
          110. el nombre de la clase empieza con mayúsculas
          111. MyClass
          112. archivo
          113. nombre en minúsculas
          114. la extensión es .php
          115. myclass.php
          116. en el controlador la clase se carga
          117. $this->load->library('class_name')
          118. class_name es el nombre de la clase en minúsculas
          119. a partir de allí se puede usar $this->class_name
          120. para reemplazar una biblioteca nativa, crear una clase auxiliar con el mismo nombre de archivo pero nombre de clase con prefijo CI_
          121. Email.php
          122. class CI_Email
          123. $this->load->library('email');
          124. excepto las clases de base de datos
          125. 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
          126. Email.php
          127. class MY_Email extends CI_Email
          128. $this->load->library('email');
        2. los ayudantes estándar están en system/helpers
          1. ci busca primero en system/application/helpers, luego en los system/helpers
        3. los plugins estandar están en system/plugins
          1. ci busca primero en system/application/plugins, luego en los system/plugins
        4. las clases auxiliares estandar están en system/libraries
          1. ci busca primero en system/application/libraries, luego en los system/libraries
    3. técnicas
      1. URL
        1. basado en segmentos
          1. http://hostname/path/appname/index.php/controller_name/method_name/param1/param2
          2. sin subdirectorios en el controlador
          3. http://hostname/path/appname/index.php/dir_name/controller_name/method_name/param1/param2
          4. con subdirectorios en el controlador
          5. opción por default
          6. helper suponen url basado en segmentos
        2. basado en query_string
          1. requiere $config['enable_query_strings'] = TRUE
          2. http://hostname/path/appname/index.php?c=controller_name&m=method_name&param1=param1&param2=param2
        3. para no mostrar index.php requiere
          1. .htaccess
          2. RewriteEngine on RewriteCond $1 !^(index\.php|images|robots\.txt) RewriteRule ^(.*)$ index.php/$1 [L]
          3. http://hostname/path/appname/controller_name/method_name/param1/param2
          4. http://hostname/path/appname/?c=controller_name&m=method_name&param1=param1&param2=param2
          5. RewriteEngine on RewriteCond $1 !^(assets|user_guide|index\.php|images|robots\.txt) RewriteRule ^(.*)$ index.php/$1 [L]
          6. para poder acceder también a user_guide y assets
      2. scaffolding
        1. en config.php, asegurarse que $config['base_url'] está bien definido
        2. en routes.php, asignar una palabra clave a $route['scaffolding_trigger']
        3. en el constructor del controlador, cargar el scaffolding de la tabla
          1. $this->load->scaffolding('nombre_tabla')
          2. la tabla debe tener una llave primaria
          3. parece que los enlaces no se forman correctamente si el controlador está en un subdirectorio
        4. para acceder, en el url ingresar a controller_name/palabra_clave
      3. unit testing
        1. $this->load->library('unit_test')
        2. $this->unit->run($test, $expected, $test_name)
        3. $this->unit->report()
          1. devuelve html del reporte
        4. $this->unit->result()
          1. devuelve array con el resultado
        5. $this->unit->active(TRUE|FALSE);
  4. referencia
    1. helpers
      1. url
        1. site_url()
        2. base_url()
        3. anchor($target, $label)
          1. el target es relativo
        4. mailto($email, $label)
        5. safe_mailto($email, $label)
          1. el email es ofuscado usando javascript
    2. database
      1. db
        1. usa ActiveRecord
          1. la data que viene de la vista se escapa automáticamente
        2. select($field | array($field1, $field2, ...))
          1. establece los campos que se considerarán
        3. from($table)
          1. establece el nombre de la tabla para el query
        4. join($table, $condicion)
        5. where($field, $value)
          1. establece condición que se une a la anterior (si hubiera) con AND
        6. orwhere($field, $value)
          1. establece condición que se une a la anterior con OR
        7. orderby($field1, "asc"|"desc"|"random")
          1. establece el criterio de orden
          2. random: cada vez al azar
        8. limit($n)
          1. establece el límite
        9. get($table)
          1. devuelve un query result
          2. usa el $table de from($table) si existiera
        10. set($table)
          1. establece el nombre de la tabla para el insert o el update
        11. insert($table, array($field1=>$value1, $field2=>$value2, ...))
          1. insert($table)
          2. usa el $table de set($table) si existiera
        12. update($table, array($field1=>$value1, $field2=>$value2, ...))
          1. update($table)
          2. usa el $table de set($table) si existiera
          3. previamente se requiere usar where() para identificar los registros a actualizar
        13. delete($table)
          1. previamente se requiere usar where() para identificar los registros a actualizar
        14. query($sql)
          1. devuelve un query result, resultado de ejecutar $sql
        15. affected_rows()
          1. devuelve el número de filas afectadas
        16. insert_id()
          1. devuelve el id del registro que se acaba de agregar
      2. $query
        1. result()
          1. devuelve el resultado del query
          2. como objeto
        2. result_array()
          1. devuelve el resultado del query
          2. como array
        3. row()
          1. devuelve una fila del resultado
          2. como objeto
        4. row_array()
          1. devuelve una fila del resultado
          2. como array
        5. num_rows()
          1. devuelve el número de filas del resultado
        6. free_result()
          1. libera de la memoria el resultado
    3. library
      1. output
        1. es automáticamente inicializada
        2. enable_profiler(TRUE|FALSE)
          1. permite visualizar información util para el desarrollador
        3. set_output($output)
          1. establece manualmente una salida
        4. get_output()
          1. devuelve la salida establecida
      2. benchmark
        1. es automáticamente inicializada
        2. mark($label)
          1. establece una marca
        3. elapsed_time($start_label, $end_label)
          1. tiempo entre dos marcas
        4. elapsed_time()
          1. tiempo total
        5. memory_usage()
          1. memoria total usada
          2. se coloca en la vista
    4. general
      1. get_instance()
        1. devuelve el objeto CodeIgniter
      2. show_error($message)
        1. muestra un página de error
          1. An Error Was Encountered
      3. show_404()
        1. muestra la página de error 404
          1. Page Not Found
      4. log_message('error'|'debug'|'info', $message)
        1. escribe en system/logs
          1. en config.php, requiere $config['log_threshold'] > 0