Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Introducción a Kohana Framework
1. Introducción a Kohana Framework Jorge Iván Meza Martínez [email_address] http://www.jorgeivanmeza.com/
2.
3. Introducción KohanaPHP es un framework liviano y flexible para el desarrollo de aplicaciones web pequeñas y medianas con PHP. Se basa en CodeIgniter al cual complementa con una mejor apropiación de la OO y PHP5, así como un mayor soporte brindado por toda una comunidad. En esta sesión se expondrán los conceptos del framework necesarios para empezar a diseñar las aplicaciones web, sin embargo no se profundizarán en detalles específicos, se recomienda complementar este documento junto con el wiki de la sección de documentación.
4.
5.
6.
7.
8. Directorios base El primer nivel de directorios separa los siguientes contenidos. /application - archivos relacionados con la aplicación final. /modules - repositorio de módulos. /system - distribución de Kohana. Su contenido no debería modificarse. En su interior incluyen un nivel adicional de directorios descritos a continuación.
9.
10. Configuración Comportamiento en cascada análogo al de la búsqueda de archivos entre los directorios: application > modules > system . config.php tendrá que estar ubicado en application/config . Separada entre varios archivos según su finalidad. Cada archivo especifica nuevos índices para el arreglo $config .
11. Configuración Las versiones originales residen en system/config y se puede copiar a las ubicaciones elegidas para sobreescribir sus valores por defecto. cache.php cookie.php database.php hooks.php locale.php log.php mimes.php pagination.php payment.php profiler.php routes.php session.php upload.php user_agents.php view.php
12. URLs Compuestos por segmentos. Es posible alterar el significado de los segmentos. http://servidor/ index.php? /controlador/acción/param1/param2 Con reescritura de URL: http://servidor/controlador/acción/param1/param2
13. URLs La solicitud del siguiente recurso ... http://servidor/calculadora/sumar/5/2 Provoca la invocación del método sumar del controlador calculadora enviándole por parámetro los valores 5 y 2 . Si el método no se especifica se invoca al método index() . Si el método solicitado no existe se invoca al método _default() .
14. URLs Ejemplo: application/controllers/calculadora.php class Calculadora_controller extends Controller { function __construct() { parent::__construct(); } function sumar($a, $b) { echo ($a + $b); } }
15. Controladores Interactúan entre el modelo y la vista. Reciben la información del requerimiento del usuario para gestionar su procesamiento (modelo) y su presentación (vista). Los nombres (clase/archivo) deben cumplir la siguiente convención. Ubicación : Almacenado bajo un /application/controllers . Archivo : blog.php (en minúsculas) Clase : Blog_Controller ( capitalized )
16. Controladores Ejemplo: application/controllers/blog.php class Blog_Controller extends Controller { public function __construct() { parent::__construct(); } public function index() { // Acción por defecto. } public function updateOwner($post_id, $newOwner) { // Acción con parámetros. } private function _internalProc($param) { // Acción interna, no se enrruta. } }
17. Controladores: métodos especiales index() - invocado cuando no se especifica ningún controlador en el URL. _remap($method, $data) - si existe, todos los requerimientos al controlador son enviados a él. _default($method, $data) - invocado cuando se solicita una acción inexistente sobre cualquier controlador. Cualquier método de un controlador con el modificador private o cuyo nombre comience por underscore (' _ ') no será enrrutado, es decir, no será visible como acción.
18. Librerías Amplían la funcionalidad de la plataforma. Son cargadas de manera automática al requerirse su ccreación. $this -> libreria = new Libreria(); Los nombres (clase/archivo) deben cumplir la siguiente convención. Ubicación : Almacenado bajo un /application/libraries . Archivo : libreria.php (en minúsculas) Clase : Libreria_Core (librerías nuevas ) Libreria (especialización de librerías)
19. Librerías: de terceros Ubicadas en application/vendors . Se cargan al framework de la siguiente manera. Kohana::find_file('vendors', 'nombre_libreria') Alternativamente se puede utilizar la sintáxis legada. $this -> load -> library ('nombre_libreria');
20. Ayudantes Son clases con métodos estáticos para realizar tareas muy específicas. Son cargados de manera automática. ayudante::metodo() Los nombres (clase/archivo) deben cumplir la siguiente convención. Ubicación : Almacenado bajo un application/helpers . Archivo : ayudante.php (en minúsculas) Clase : ayudante_Core (ayudantes nuevos ) ayudante (especialización de ayudantes)
21. Vistas Son las encargadas de generar el nivel de presentación: XHTML, CSS, JavaScript, XML, JSON, Ajax, etc. Son archivos PHP que contienen la lógica de la presentación. Se ubican en application/views .
22. Vistas: carga Existen tres métodos. Objetos . $v = new View('nombre_vista'); Fábrica : permite el encadenamiento de mensajes. $v = View::factory('nombre_vista'); Cargador : obsoleto. $v = $this -> load -> view('nombre_vista');
23. Vistas: paso de información Sección de código de un controlador . // Crea la referencia a la vista. $v = new View('vista'); // Establece la información de la vista. $v -> titulo = “Introducción a Kohana”; $v -> contenido = “Resúmen práctico”; $v -> fecha = “Desarrollado en 2008”; // Envía el contenido de la vista al usuario. $v -> render(true);
24. Vistas: paso de información Sección de código de una vista . <html> <head> <title><?php echo $ titulo ; ?></title> </head> <body> <h1> <?php echo $ titulo ; ?> </h1> <p> <?php echo $ contenido ; ?> </p> <hr /> <p><?php echo $ fecha ; ?></p> </body> </html>
25. Vistas: paso de información También es posible pasar arreglos de variables a la vista. $ items = array( array( 'nombre' => 'elemento 1', 'valor' => '1' ), array( 'nombre' => 'elemento 2', 'valor' => '2' ) ); $v -> set('productos', $ items );
26. Vistas: composición Sección de código de un controlador . // Establece la información de la vista. $v -> titulo = “Introducción a Kohana”; $v -> contenido = new View('vista_contenido'); $v -> fecha = “Desarrollado en 2008”; $v -> contenido -> nombres = “Kohana”; $v -> contenido -> apellidos = “Framework”; // Envía el contenido de la vista al usuario. $v -> render(true);
27. Modelos Representan los datos y modelan la lógica del negocio. Desde el framework no es obligatoria su utilización. Los nombres (clase/archivo) deben cumplir la siguiente convención. Ubicación : Almacenado bajo application/models . Archivo : usuario.php (en minúsculas y singular) Clase : Usuario_Model ( capitalized y singular )
28. Modelos class Usuario_Model extends Model { private $nombreUsuario; private $contrasena; private $direccionCorreo; public function __construct($id = null) { parent::__construct($id); } public function obtener($id) { ... } public function actualizar() { ... } public function remover() { ... } }
29. Modelos: carga Para el ámbito local. $usuario = new Usuario_Model(); $usuario -> obtener('123'); Para el ámbito del controlador. $this -> usuario = new Usuario_Model(); $this -> usuario -> obtener('123');
30. Eventos Son sucesos ocurridos durante la ejecución en el tiempo del sistema. Pueden ser internos ( system.* ) o creados por el usuario. system.ready - hooks recién cargados. Primer evento del sistema. system.routing - se procesa el URL y se realiza su enrrutamiento. system.execute - se localiza e inicia el controlador.
31. Eventos system.post_routing - se finaliza el enrrutamiento y se genera un 404 en caso de fallar. system.404 - no se encontró una página. system.pre_controller - controlador es cargado pero no se ha ejecutado aún. syste m.post_controller_constructor - se invocó el constructor del controlador pero no sus métodos. system. post_controller - controlador creado y vistas cargadas.
32. Eventos system.send_headers - buffer de salida cerrado, antes de desplegar su contenido. system.send_display - salida desplegada. system.shutdown - último evento en suceder.
33. Hooks Permiten la ejecución de métodos frente al suceso de eventos determinados. Residen en application/hooks . Activar en application/config/hooks.php : $config['enable'] = true; ó $config['enable'] = array('muestra', 'hook2');
34. Hooks Sección de código de un hook : hooks/muestra.php class Muestra { public function informacion () { Event::$data = Event::$data . “Mensaje”; } } Event::add(' system.display ', array(' Muestra ', ' informacion '));
35.
36. Kohana_Exception Requieren del soporte de archivos i18n para la traducción del mensaje. throw new Kohana_Exception ($i18n_lang_key [, mensaje_adicional]);
37. Kohana_User_Exception Similar a la anterior, sin embargo no requieren de soporte de i18n. throw new Kohana_User_Exception ($titulo, $mensaje [, $plantilla]); Ejemplo: throw new Kohana_User_Exception ('Error de conversión', 'No puede utilizarse un número negativo: ' . $valorRecibido);
38. Kohana_404_Exception Redirecciona al usuario a un mensaje de 404. throw new Kohana_404_Exception ([$pagina [, $plantilla]]); Ejemplo: throw new Kohana_404_Exception ('División por cero');
39. Módulos Son colecciones de archivos relacionados (ayudantes, librerías, modelos, vistas, etc.) con una funcionalidad específica que pueden ser reutilizados. Su carga no es automática. Modificar en application/config/config.php : $config['modules'] => array( 'modules/modulo_1', 'modules/modulo_2' );
40.
41.
42.
43.
44. Enlaces de interés Kohana Framework http://www.kohanaphp.com/ Documentación http://docs.kohanaphp.com/ Descargas http://www.kohanaphp.com/download.html Tutoriales http://learn.kohanaphp.com/ Foros http://forum.kohanaphp.com/ CodeIgniter http://www.codeigniter.com/